<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/linux/linux-3.13/include/linux/list.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/linux/linux-3.13/include/linux/list.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="Maybe">       1:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_X0xJTlVYX0xJU1RfSF8w"><span class="b">_LINUX_LIST_H</span></a>
<a name="2" /><span class="Maybe">       2:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X0xJTlVYX0xJU1RfSF8w"><span class="b">_LINUX_LIST_H</span></a>
<a name="3" /><span class="Maybe">       3:</span> 
<a name="4" /><span class="Maybe">       4:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">types</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="5" /><span class="Maybe">       5:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">stddef</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="6" /><span class="Maybe">       6:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">poison</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="7" /><span class="Maybe">       7:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="m">const</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="8" /><span class="Maybe">       8:</span> 
<a name="9" /><span class="Maybe">       9:</span> <span class="k">/*</span>
<a name="10" /><span class="Maybe">      10:</span> <span class="k"> * Simple doubly linked list implementation.</span>
<a name="11" /><span class="Maybe">      11:</span> <span class="k"> *</span>
<a name="12" /><span class="Maybe">      12:</span> <span class="k"> * Some of the internal functions (&quot;__xxx&quot;) are useful when</span>
<a name="13" /><span class="Maybe">      13:</span> <span class="k"> * manipulating whole lists rather than single entries, as</span>
<a name="14" /><span class="Maybe">      14:</span> <span class="k"> * sometimes we already know the next/prev entries and we can</span>
<a name="15" /><span class="Maybe">      15:</span> <span class="k"> * generate better code by using them directly rather than</span>
<a name="16" /><span class="Maybe">      16:</span> <span class="k"> * using the generic single-entry routines.</span>
<a name="17" /><span class="Maybe">      17:</span> <span class="k"> */</span>
<a name="18" /><span class="Maybe">      18:</span> 
<a name="19" /><span class="Maybe">      19:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_TElTVF9IRUFEX0lOSVRfMA__"><span class="b">LIST_HEAD_INIT</span></a><span class="f">(</span><span class="b">name</span><span class="f">)</span> <span class="f">{</span> <span class="f">&amp;</span><span class="f">(</span><span class="b">name</span><span class="f">)</span><span class="f">,</span> <span class="f">&amp;</span><span class="f">(</span><span class="b">name</span><span class="f">)</span> <span class="f">}</span>
<a name="20" /><span class="Maybe">      20:</span> 
<a name="21" /><span class="Maybe">      21:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_TElTVF9IRUFEXzA_"><span class="b">LIST_HEAD</span></a><span class="f">(</span><span class="b">name</span><span class="f">)</span> \
<a name="22" /><span class="Maybe">      22:</span>     <span class="m">struct</span> <span class="b">list_head</span> <span class="b">name</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_TElTVF9IRUFEX0lOSVRfMA__"><span class="b">LIST_HEAD_INIT</span></a><span class="f">(</span><span class="b">name</span><span class="f">)</span>
<a name="23" /><span class="Maybe">      23:</span> 
<a name="24" /><span class="Maybe">      24:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">INIT_LIST_HEAD</span><span class="f">(</span><span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">list</span><span class="f">)</span>
<a name="25" /><span class="Maybe">      25:</span> <span class="f">{</span>
<a name="26" /><span class="Maybe">      26:</span>     <span class="b">list</span><span class="f">-&gt;</span><span class="b">next</span> <span class="f">=</span> <span class="b">list</span><span class="f">;</span>
<a name="27" /><span class="Maybe">      27:</span>     <span class="b">list</span><span class="f">-&gt;</span><span class="b">prev</span> <span class="f">=</span> <span class="b">list</span><span class="f">;</span>
<a name="28" /><span class="Maybe">      28:</span> <span class="f">}</span>
<a name="29" /><span class="Maybe">      29:</span> 
<a name="30" /><span class="Maybe">      30:</span> <span class="k">/*</span>
<a name="31" /><span class="Maybe">      31:</span> <span class="k"> * Insert a new entry between two known consecutive entries.</span>
<a name="32" /><span class="Maybe">      32:</span> <span class="k"> *</span>
<a name="33" /><span class="Maybe">      33:</span> <span class="k"> * This is only for internal list manipulation where we know</span>
<a name="34" /><span class="Maybe">      34:</span> <span class="k"> * the prev/next entries already!</span>
<a name="35" /><span class="Maybe">      35:</span> <span class="k"> */</span>
<a name="36" /><span class="Maybe">      36:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">CONFIG_DEBUG_LIST</span>
<a name="37" /><span class="Maybe">      37:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">__list_add</span><span class="f">(</span><span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="m">new</span><span class="f">,</span>
<a name="38" /><span class="Maybe">      38:</span>                   <span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">prev</span><span class="f">,</span>
<a name="39" /><span class="Maybe">      39:</span>                   <span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">next</span><span class="f">)</span>
<a name="40" /><span class="Maybe">      40:</span> <span class="f">{</span>
<a name="41" /><span class="Maybe">      41:</span>     <span class="b">next</span><span class="f">-&gt;</span><span class="b">prev</span> <span class="f">=</span> <span class="m">new</span><span class="f">;</span>
<a name="42" /><span class="Maybe">      42:</span>     <span class="m">new</span><span class="f">-&gt;</span><span class="b">next</span> <span class="f">=</span> <span class="b">next</span><span class="f">;</span>
<a name="43" /><span class="Maybe">      43:</span>     <span class="m">new</span><span class="f">-&gt;</span><span class="b">prev</span> <span class="f">=</span> <span class="b">prev</span><span class="f">;</span>
<a name="44" /><span class="Maybe">      44:</span>     <span class="b">prev</span><span class="f">-&gt;</span><span class="b">next</span> <span class="f">=</span> <span class="m">new</span><span class="f">;</span>
<a name="45" /><span class="Maybe">      45:</span> <span class="f">}</span>
<a name="46" /><span class="False">      46:</span> <span class="f">#</span><span class="n">else</span>
<a name="47" /><span class="False">      47:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">__list_add</span><span class="f">(</span><span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="m">new</span><span class="f">,</span>
<a name="48" /><span class="False">      48:</span>                   <span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">prev</span><span class="f">,</span>
<a name="49" /><span class="False">      49:</span>                   <span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">next</span><span class="f">)</span><span class="f">;</span>
<a name="50" /><span class="Maybe">      50:</span> <span class="f">#</span><span class="n">endif</span>
<a name="51" /><span class="Maybe">      51:</span> 
<a name="52" /><span class="Maybe">      52:</span> <span class="k">/**</span>
<a name="53" /><span class="Maybe">      53:</span> <span class="k"> * list_add - add a new entry</span>
<a name="54" /><span class="Maybe">      54:</span> <span class="k"> * @new: new entry to be added</span>
<a name="55" /><span class="Maybe">      55:</span> <span class="k"> * @head: list head to add it after</span>
<a name="56" /><span class="Maybe">      56:</span> <span class="k"> *</span>
<a name="57" /><span class="Maybe">      57:</span> <span class="k"> * Insert a new entry after the specified head.</span>
<a name="58" /><span class="Maybe">      58:</span> <span class="k"> * This is good for implementing stacks.</span>
<a name="59" /><span class="Maybe">      59:</span> <span class="k"> */</span>
<a name="60" /><span class="Maybe">      60:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">list_add</span><span class="f">(</span><span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="m">new</span><span class="f">,</span> <span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">head</span><span class="f">)</span>
<a name="61" /><span class="Maybe">      61:</span> <span class="f">{</span>
<a name="62" /><span class="Maybe">      62:</span>     <span class="b">__list_add</span><span class="f">(</span><span class="m">new</span><span class="f">,</span> <span class="b">head</span><span class="f">,</span> <span class="b">head</span><span class="f">-&gt;</span><span class="b">next</span><span class="f">)</span><span class="f">;</span>
<a name="63" /><span class="Maybe">      63:</span> <span class="f">}</span>
<a name="64" /><span class="Maybe">      64:</span> 
<a name="65" /><span class="Maybe">      65:</span> 
<a name="66" /><span class="Maybe">      66:</span> <span class="k">/**</span>
<a name="67" /><span class="Maybe">      67:</span> <span class="k"> * list_add_tail - add a new entry</span>
<a name="68" /><span class="Maybe">      68:</span> <span class="k"> * @new: new entry to be added</span>
<a name="69" /><span class="Maybe">      69:</span> <span class="k"> * @head: list head to add it before</span>
<a name="70" /><span class="Maybe">      70:</span> <span class="k"> *</span>
<a name="71" /><span class="Maybe">      71:</span> <span class="k"> * Insert a new entry before the specified head.</span>
<a name="72" /><span class="Maybe">      72:</span> <span class="k"> * This is useful for implementing queues.</span>
<a name="73" /><span class="Maybe">      73:</span> <span class="k"> */</span>
<a name="74" /><span class="Maybe">      74:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">list_add_tail</span><span class="f">(</span><span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="m">new</span><span class="f">,</span> <span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">head</span><span class="f">)</span>
<a name="75" /><span class="Maybe">      75:</span> <span class="f">{</span>
<a name="76" /><span class="Maybe">      76:</span>     <span class="b">__list_add</span><span class="f">(</span><span class="m">new</span><span class="f">,</span> <span class="b">head</span><span class="f">-&gt;</span><span class="b">prev</span><span class="f">,</span> <span class="b">head</span><span class="f">)</span><span class="f">;</span>
<a name="77" /><span class="Maybe">      77:</span> <span class="f">}</span>
<a name="78" /><span class="Maybe">      78:</span> 
<a name="79" /><span class="Maybe">      79:</span> <span class="k">/*</span>
<a name="80" /><span class="Maybe">      80:</span> <span class="k"> * Delete a list entry by making the prev/next entries</span>
<a name="81" /><span class="Maybe">      81:</span> <span class="k"> * point to each other.</span>
<a name="82" /><span class="Maybe">      82:</span> <span class="k"> *</span>
<a name="83" /><span class="Maybe">      83:</span> <span class="k"> * This is only for internal list manipulation where we know</span>
<a name="84" /><span class="Maybe">      84:</span> <span class="k"> * the prev/next entries already!</span>
<a name="85" /><span class="Maybe">      85:</span> <span class="k"> */</span>
<a name="86" /><span class="Maybe">      86:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">__list_del</span><span class="f">(</span><span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span> <span class="b">prev</span><span class="f">,</span> <span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span> <span class="b">next</span><span class="f">)</span>
<a name="87" /><span class="Maybe">      87:</span> <span class="f">{</span>
<a name="88" /><span class="Maybe">      88:</span>     <span class="b">next</span><span class="f">-&gt;</span><span class="b">prev</span> <span class="f">=</span> <span class="b">prev</span><span class="f">;</span>
<a name="89" /><span class="Maybe">      89:</span>     <span class="b">prev</span><span class="f">-&gt;</span><span class="b">next</span> <span class="f">=</span> <span class="b">next</span><span class="f">;</span>
<a name="90" /><span class="Maybe">      90:</span> <span class="f">}</span>
<a name="91" /><span class="Maybe">      91:</span> 
<a name="92" /><span class="Maybe">      92:</span> <span class="k">/**</span>
<a name="93" /><span class="Maybe">      93:</span> <span class="k"> * list_del - deletes entry from list.</span>
<a name="94" /><span class="Maybe">      94:</span> <span class="k"> * @entry: the element to delete from the list.</span>
<a name="95" /><span class="Maybe">      95:</span> <span class="k"> * Note: list_empty() on entry does not return true after this, the entry is</span>
<a name="96" /><span class="Maybe">      96:</span> <span class="k"> * in an undefined state.</span>
<a name="97" /><span class="Maybe">      97:</span> <span class="k"> */</span>
<a name="98" /><span class="Maybe">      98:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">CONFIG_DEBUG_LIST</span>
<a name="99" /><span class="Maybe">      99:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">__list_del_entry</span><span class="f">(</span><span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">entry</span><span class="f">)</span>
<a name="100" /><span class="Maybe">     100:</span> <span class="f">{</span>
<a name="101" /><span class="Maybe">     101:</span>     <span class="b">__list_del</span><span class="f">(</span><span class="b">entry</span><span class="f">-&gt;</span><span class="b">prev</span><span class="f">,</span> <span class="b">entry</span><span class="f">-&gt;</span><span class="b">next</span><span class="f">)</span><span class="f">;</span>
<a name="102" /><span class="Maybe">     102:</span> <span class="f">}</span>
<a name="103" /><span class="Maybe">     103:</span> 
<a name="104" /><span class="Maybe">     104:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">list_del</span><span class="f">(</span><span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">entry</span><span class="f">)</span>
<a name="105" /><span class="Maybe">     105:</span> <span class="f">{</span>
<a name="106" /><span class="Maybe">     106:</span>     <span class="b">__list_del</span><span class="f">(</span><span class="b">entry</span><span class="f">-&gt;</span><span class="b">prev</span><span class="f">,</span> <span class="b">entry</span><span class="f">-&gt;</span><span class="b">next</span><span class="f">)</span><span class="f">;</span>
<a name="107" /><span class="Maybe">     107:</span>     <span class="b">entry</span><span class="f">-&gt;</span><span class="b">next</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_TElTVF9QT0lTT04xXzA_"><span class="b">LIST_POISON1</span></a><span class="f">;</span>
<a name="108" /><span class="Maybe">     108:</span>     <span class="b">entry</span><span class="f">-&gt;</span><span class="b">prev</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_TElTVF9QT0lTT04yXzA_"><span class="b">LIST_POISON2</span></a><span class="f">;</span>
<a name="109" /><span class="Maybe">     109:</span> <span class="f">}</span>
<a name="110" /><span class="False">     110:</span> <span class="f">#</span><span class="n">else</span>
<a name="111" /><span class="False">     111:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">__list_del_entry</span><span class="f">(</span><span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">entry</span><span class="f">)</span><span class="f">;</span>
<a name="112" /><span class="False">     112:</span> <span class="m">extern</span> <span class="m">void</span> <span class="b">list_del</span><span class="f">(</span><span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">entry</span><span class="f">)</span><span class="f">;</span>
<a name="113" /><span class="Maybe">     113:</span> <span class="f">#</span><span class="n">endif</span>
<a name="114" /><span class="Maybe">     114:</span> 
<a name="115" /><span class="Maybe">     115:</span> <span class="k">/**</span>
<a name="116" /><span class="Maybe">     116:</span> <span class="k"> * list_replace - replace old entry by new one</span>
<a name="117" /><span class="Maybe">     117:</span> <span class="k"> * @old : the element to be replaced</span>
<a name="118" /><span class="Maybe">     118:</span> <span class="k"> * @new : the new element to insert</span>
<a name="119" /><span class="Maybe">     119:</span> <span class="k"> *</span>
<a name="120" /><span class="Maybe">     120:</span> <span class="k"> * If @old was empty, it will be overwritten.</span>
<a name="121" /><span class="Maybe">     121:</span> <span class="k"> */</span>
<a name="122" /><span class="Maybe">     122:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">list_replace</span><span class="f">(</span><span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">old</span><span class="f">,</span>
<a name="123" /><span class="Maybe">     123:</span>                 <span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="m">new</span><span class="f">)</span>
<a name="124" /><span class="Maybe">     124:</span> <span class="f">{</span>
<a name="125" /><span class="Maybe">     125:</span>     <span class="m">new</span><span class="f">-&gt;</span><span class="b">next</span> <span class="f">=</span> <span class="b">old</span><span class="f">-&gt;</span><span class="b">next</span><span class="f">;</span>
<a name="126" /><span class="Maybe">     126:</span>     <span class="m">new</span><span class="f">-&gt;</span><span class="b">next</span><span class="f">-&gt;</span><span class="b">prev</span> <span class="f">=</span> <span class="m">new</span><span class="f">;</span>
<a name="127" /><span class="Maybe">     127:</span>     <span class="m">new</span><span class="f">-&gt;</span><span class="b">prev</span> <span class="f">=</span> <span class="b">old</span><span class="f">-&gt;</span><span class="b">prev</span><span class="f">;</span>
<a name="128" /><span class="Maybe">     128:</span>     <span class="m">new</span><span class="f">-&gt;</span><span class="b">prev</span><span class="f">-&gt;</span><span class="b">next</span> <span class="f">=</span> <span class="m">new</span><span class="f">;</span>
<a name="129" /><span class="Maybe">     129:</span> <span class="f">}</span>
<a name="130" /><span class="Maybe">     130:</span> 
<a name="131" /><span class="Maybe">     131:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">list_replace_init</span><span class="f">(</span><span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">old</span><span class="f">,</span>
<a name="132" /><span class="Maybe">     132:</span>                     <span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="m">new</span><span class="f">)</span>
<a name="133" /><span class="Maybe">     133:</span> <span class="f">{</span>
<a name="134" /><span class="Maybe">     134:</span>     <span class="b">list_replace</span><span class="f">(</span><span class="b">old</span><span class="f">,</span> <span class="m">new</span><span class="f">)</span><span class="f">;</span>
<a name="135" /><span class="Maybe">     135:</span>     <span class="b">INIT_LIST_HEAD</span><span class="f">(</span><span class="b">old</span><span class="f">)</span><span class="f">;</span>
<a name="136" /><span class="Maybe">     136:</span> <span class="f">}</span>
<a name="137" /><span class="Maybe">     137:</span> 
<a name="138" /><span class="Maybe">     138:</span> <span class="k">/**</span>
<a name="139" /><span class="Maybe">     139:</span> <span class="k"> * list_del_init - deletes entry from list and reinitialize it.</span>
<a name="140" /><span class="Maybe">     140:</span> <span class="k"> * @entry: the element to delete from the list.</span>
<a name="141" /><span class="Maybe">     141:</span> <span class="k"> */</span>
<a name="142" /><span class="Maybe">     142:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">list_del_init</span><span class="f">(</span><span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">entry</span><span class="f">)</span>
<a name="143" /><span class="Maybe">     143:</span> <span class="f">{</span>
<a name="144" /><span class="Maybe">     144:</span>     <span class="b">__list_del_entry</span><span class="f">(</span><span class="b">entry</span><span class="f">)</span><span class="f">;</span>
<a name="145" /><span class="Maybe">     145:</span>     <span class="b">INIT_LIST_HEAD</span><span class="f">(</span><span class="b">entry</span><span class="f">)</span><span class="f">;</span>
<a name="146" /><span class="Maybe">     146:</span> <span class="f">}</span>
<a name="147" /><span class="Maybe">     147:</span> 
<a name="148" /><span class="Maybe">     148:</span> <span class="k">/**</span>
<a name="149" /><span class="Maybe">     149:</span> <span class="k"> * list_move - delete from one list and add as another&apos;s head</span>
<a name="150" /><span class="Maybe">     150:</span> <span class="k"> * @list: the entry to move</span>
<a name="151" /><span class="Maybe">     151:</span> <span class="k"> * @head: the head that will precede our entry</span>
<a name="152" /><span class="Maybe">     152:</span> <span class="k"> */</span>
<a name="153" /><span class="Maybe">     153:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">list_move</span><span class="f">(</span><span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">list</span><span class="f">,</span> <span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">head</span><span class="f">)</span>
<a name="154" /><span class="Maybe">     154:</span> <span class="f">{</span>
<a name="155" /><span class="Maybe">     155:</span>     <span class="b">__list_del_entry</span><span class="f">(</span><span class="b">list</span><span class="f">)</span><span class="f">;</span>
<a name="156" /><span class="Maybe">     156:</span>     <span class="b">list_add</span><span class="f">(</span><span class="b">list</span><span class="f">,</span> <span class="b">head</span><span class="f">)</span><span class="f">;</span>
<a name="157" /><span class="Maybe">     157:</span> <span class="f">}</span>
<a name="158" /><span class="Maybe">     158:</span> 
<a name="159" /><span class="Maybe">     159:</span> <span class="k">/**</span>
<a name="160" /><span class="Maybe">     160:</span> <span class="k"> * list_move_tail - delete from one list and add as another&apos;s tail</span>
<a name="161" /><span class="Maybe">     161:</span> <span class="k"> * @list: the entry to move</span>
<a name="162" /><span class="Maybe">     162:</span> <span class="k"> * @head: the head that will follow our entry</span>
<a name="163" /><span class="Maybe">     163:</span> <span class="k"> */</span>
<a name="164" /><span class="Maybe">     164:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">list_move_tail</span><span class="f">(</span><span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">list</span><span class="f">,</span>
<a name="165" /><span class="Maybe">     165:</span>                   <span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">head</span><span class="f">)</span>
<a name="166" /><span class="Maybe">     166:</span> <span class="f">{</span>
<a name="167" /><span class="Maybe">     167:</span>     <span class="b">__list_del_entry</span><span class="f">(</span><span class="b">list</span><span class="f">)</span><span class="f">;</span>
<a name="168" /><span class="Maybe">     168:</span>     <span class="b">list_add_tail</span><span class="f">(</span><span class="b">list</span><span class="f">,</span> <span class="b">head</span><span class="f">)</span><span class="f">;</span>
<a name="169" /><span class="Maybe">     169:</span> <span class="f">}</span>
<a name="170" /><span class="Maybe">     170:</span> 
<a name="171" /><span class="Maybe">     171:</span> <span class="k">/**</span>
<a name="172" /><span class="Maybe">     172:</span> <span class="k"> * list_is_last - tests whether @list is the last entry in list @head</span>
<a name="173" /><span class="Maybe">     173:</span> <span class="k"> * @list: the entry to test</span>
<a name="174" /><span class="Maybe">     174:</span> <span class="k"> * @head: the head of the list</span>
<a name="175" /><span class="Maybe">     175:</span> <span class="k"> */</span>
<a name="176" /><span class="Maybe">     176:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">list_is_last</span><span class="f">(</span><span class="m">const</span> <span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">list</span><span class="f">,</span>
<a name="177" /><span class="Maybe">     177:</span>                 <span class="m">const</span> <span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">head</span><span class="f">)</span>
<a name="178" /><span class="Maybe">     178:</span> <span class="f">{</span>
<a name="179" /><span class="Maybe">     179:</span>     <span class="m">return</span> <span class="b">list</span><span class="f">-&gt;</span><span class="b">next</span> <span class="f">==</span> <span class="b">head</span><span class="f">;</span>
<a name="180" /><span class="Maybe">     180:</span> <span class="f">}</span>
<a name="181" /><span class="Maybe">     181:</span> 
<a name="182" /><span class="Maybe">     182:</span> <span class="k">/**</span>
<a name="183" /><span class="Maybe">     183:</span> <span class="k"> * list_empty - tests whether a list is empty</span>
<a name="184" /><span class="Maybe">     184:</span> <span class="k"> * @head: the list to test.</span>
<a name="185" /><span class="Maybe">     185:</span> <span class="k"> */</span>
<a name="186" /><span class="Maybe">     186:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">list_empty</span><span class="f">(</span><span class="m">const</span> <span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">head</span><span class="f">)</span>
<a name="187" /><span class="Maybe">     187:</span> <span class="f">{</span>
<a name="188" /><span class="Maybe">     188:</span>     <span class="m">return</span> <span class="b">head</span><span class="f">-&gt;</span><span class="b">next</span> <span class="f">==</span> <span class="b">head</span><span class="f">;</span>
<a name="189" /><span class="Maybe">     189:</span> <span class="f">}</span>
<a name="190" /><span class="Maybe">     190:</span> 
<a name="191" /><span class="Maybe">     191:</span> <span class="k">/**</span>
<a name="192" /><span class="Maybe">     192:</span> <span class="k"> * list_empty_careful - tests whether a list is empty and not being modified</span>
<a name="193" /><span class="Maybe">     193:</span> <span class="k"> * @head: the list to test</span>
<a name="194" /><span class="Maybe">     194:</span> <span class="k"> *</span>
<a name="195" /><span class="Maybe">     195:</span> <span class="k"> * Description:</span>
<a name="196" /><span class="Maybe">     196:</span> <span class="k"> * tests whether a list is empty _and_ checks that no other CPU might be</span>
<a name="197" /><span class="Maybe">     197:</span> <span class="k"> * in the process of modifying either member (next or prev)</span>
<a name="198" /><span class="Maybe">     198:</span> <span class="k"> *</span>
<a name="199" /><span class="Maybe">     199:</span> <span class="k"> * NOTE: using list_empty_careful() without synchronization</span>
<a name="200" /><span class="Maybe">     200:</span> <span class="k"> * can only be safe if the only activity that can happen</span>
<a name="201" /><span class="Maybe">     201:</span> <span class="k"> * to the list entry is list_del_init(). Eg. it cannot be used</span>
<a name="202" /><span class="Maybe">     202:</span> <span class="k"> * if another CPU could re-list_add() it.</span>
<a name="203" /><span class="Maybe">     203:</span> <span class="k"> */</span>
<a name="204" /><span class="Maybe">     204:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">list_empty_careful</span><span class="f">(</span><span class="m">const</span> <span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">head</span><span class="f">)</span>
<a name="205" /><span class="Maybe">     205:</span> <span class="f">{</span>
<a name="206" /><span class="Maybe">     206:</span>     <span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">next</span> <span class="f">=</span> <span class="b">head</span><span class="f">-&gt;</span><span class="b">next</span><span class="f">;</span>
<a name="207" /><span class="Maybe">     207:</span>     <span class="m">return</span> <span class="f">(</span><span class="b">next</span> <span class="f">==</span> <span class="b">head</span><span class="f">)</span> <span class="f">&amp;&amp;</span> <span class="f">(</span><span class="b">next</span> <span class="f">==</span> <span class="b">head</span><span class="f">-&gt;</span><span class="b">prev</span><span class="f">)</span><span class="f">;</span>
<a name="208" /><span class="Maybe">     208:</span> <span class="f">}</span>
<a name="209" /><span class="Maybe">     209:</span> 
<a name="210" /><span class="Maybe">     210:</span> <span class="k">/**</span>
<a name="211" /><span class="Maybe">     211:</span> <span class="k"> * list_rotate_left - rotate the list to the left</span>
<a name="212" /><span class="Maybe">     212:</span> <span class="k"> * @head: the head of the list</span>
<a name="213" /><span class="Maybe">     213:</span> <span class="k"> */</span>
<a name="214" /><span class="Maybe">     214:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">list_rotate_left</span><span class="f">(</span><span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">head</span><span class="f">)</span>
<a name="215" /><span class="Maybe">     215:</span> <span class="f">{</span>
<a name="216" /><span class="Maybe">     216:</span>     <span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">first</span><span class="f">;</span>
<a name="217" /><span class="Maybe">     217:</span> 
<a name="218" /><span class="Maybe">     218:</span>     <span class="m">if</span> <span class="f">(</span><span class="f">!</span><span class="b">list_empty</span><span class="f">(</span><span class="b">head</span><span class="f">)</span><span class="f">)</span> <span class="f">{</span>
<a name="219" /><span class="Maybe">     219:</span>         <span class="b">first</span> <span class="f">=</span> <span class="b">head</span><span class="f">-&gt;</span><span class="b">next</span><span class="f">;</span>
<a name="220" /><span class="Maybe">     220:</span>         <span class="b">list_move_tail</span><span class="f">(</span><span class="b">first</span><span class="f">,</span> <span class="b">head</span><span class="f">)</span><span class="f">;</span>
<a name="221" /><span class="Maybe">     221:</span>     <span class="f">}</span>
<a name="222" /><span class="Maybe">     222:</span> <span class="f">}</span>
<a name="223" /><span class="Maybe">     223:</span> 
<a name="224" /><span class="Maybe">     224:</span> <span class="k">/**</span>
<a name="225" /><span class="Maybe">     225:</span> <span class="k"> * list_is_singular - tests whether a list has just one entry.</span>
<a name="226" /><span class="Maybe">     226:</span> <span class="k"> * @head: the list to test.</span>
<a name="227" /><span class="Maybe">     227:</span> <span class="k"> */</span>
<a name="228" /><span class="Maybe">     228:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">list_is_singular</span><span class="f">(</span><span class="m">const</span> <span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">head</span><span class="f">)</span>
<a name="229" /><span class="Maybe">     229:</span> <span class="f">{</span>
<a name="230" /><span class="Maybe">     230:</span>     <span class="m">return</span> <span class="f">!</span><span class="b">list_empty</span><span class="f">(</span><span class="b">head</span><span class="f">)</span> <span class="f">&amp;&amp;</span> <span class="f">(</span><span class="b">head</span><span class="f">-&gt;</span><span class="b">next</span> <span class="f">==</span> <span class="b">head</span><span class="f">-&gt;</span><span class="b">prev</span><span class="f">)</span><span class="f">;</span>
<a name="231" /><span class="Maybe">     231:</span> <span class="f">}</span>
<a name="232" /><span class="Maybe">     232:</span> 
<a name="233" /><span class="Maybe">     233:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">__list_cut_position</span><span class="f">(</span><span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">list</span><span class="f">,</span>
<a name="234" /><span class="Maybe">     234:</span>         <span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">head</span><span class="f">,</span> <span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">entry</span><span class="f">)</span>
<a name="235" /><span class="Maybe">     235:</span> <span class="f">{</span>
<a name="236" /><span class="Maybe">     236:</span>     <span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">new_first</span> <span class="f">=</span> <span class="b">entry</span><span class="f">-&gt;</span><span class="b">next</span><span class="f">;</span>
<a name="237" /><span class="Maybe">     237:</span>     <span class="b">list</span><span class="f">-&gt;</span><span class="b">next</span> <span class="f">=</span> <span class="b">head</span><span class="f">-&gt;</span><span class="b">next</span><span class="f">;</span>
<a name="238" /><span class="Maybe">     238:</span>     <span class="b">list</span><span class="f">-&gt;</span><span class="b">next</span><span class="f">-&gt;</span><span class="b">prev</span> <span class="f">=</span> <span class="b">list</span><span class="f">;</span>
<a name="239" /><span class="Maybe">     239:</span>     <span class="b">list</span><span class="f">-&gt;</span><span class="b">prev</span> <span class="f">=</span> <span class="b">entry</span><span class="f">;</span>
<a name="240" /><span class="Maybe">     240:</span>     <span class="b">entry</span><span class="f">-&gt;</span><span class="b">next</span> <span class="f">=</span> <span class="b">list</span><span class="f">;</span>
<a name="241" /><span class="Maybe">     241:</span>     <span class="b">head</span><span class="f">-&gt;</span><span class="b">next</span> <span class="f">=</span> <span class="b">new_first</span><span class="f">;</span>
<a name="242" /><span class="Maybe">     242:</span>     <span class="b">new_first</span><span class="f">-&gt;</span><span class="b">prev</span> <span class="f">=</span> <span class="b">head</span><span class="f">;</span>
<a name="243" /><span class="Maybe">     243:</span> <span class="f">}</span>
<a name="244" /><span class="Maybe">     244:</span> 
<a name="245" /><span class="Maybe">     245:</span> <span class="k">/**</span>
<a name="246" /><span class="Maybe">     246:</span> <span class="k"> * list_cut_position - cut a list into two</span>
<a name="247" /><span class="Maybe">     247:</span> <span class="k"> * @list: a new list to add all removed entries</span>
<a name="248" /><span class="Maybe">     248:</span> <span class="k"> * @head: a list with entries</span>
<a name="249" /><span class="Maybe">     249:</span> <span class="k"> * @entry: an entry within head, could be the head itself</span>
<a name="250" /><span class="Maybe">     250:</span> <span class="k"> *    and if so we won&apos;t cut the list</span>
<a name="251" /><span class="Maybe">     251:</span> <span class="k"> *</span>
<a name="252" /><span class="Maybe">     252:</span> <span class="k"> * This helper moves the initial part of @head, up to and</span>
<a name="253" /><span class="Maybe">     253:</span> <span class="k"> * including @entry, from @head to @list. You should</span>
<a name="254" /><span class="Maybe">     254:</span> <span class="k"> * pass on @entry an element you know is on @head. @list</span>
<a name="255" /><span class="Maybe">     255:</span> <span class="k"> * should be an empty list or a list you do not care about</span>
<a name="256" /><span class="Maybe">     256:</span> <span class="k"> * losing its data.</span>
<a name="257" /><span class="Maybe">     257:</span> <span class="k"> *</span>
<a name="258" /><span class="Maybe">     258:</span> <span class="k"> */</span>
<a name="259" /><span class="Maybe">     259:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">list_cut_position</span><span class="f">(</span><span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">list</span><span class="f">,</span>
<a name="260" /><span class="Maybe">     260:</span>         <span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">head</span><span class="f">,</span> <span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">entry</span><span class="f">)</span>
<a name="261" /><span class="Maybe">     261:</span> <span class="f">{</span>
<a name="262" /><span class="Maybe">     262:</span>     <span class="m">if</span> <span class="f">(</span><span class="b">list_empty</span><span class="f">(</span><span class="b">head</span><span class="f">)</span><span class="f">)</span>
<a name="263" /><span class="Maybe">     263:</span>         <span class="m">return</span><span class="f">;</span>
<a name="264" /><span class="Maybe">     264:</span>     <span class="m">if</span> <span class="f">(</span><span class="b">list_is_singular</span><span class="f">(</span><span class="b">head</span><span class="f">)</span> <span class="f">&amp;&amp;</span>
<a name="265" /><span class="Maybe">     265:</span>         <span class="f">(</span><span class="b">head</span><span class="f">-&gt;</span><span class="b">next</span> <span class="f">!=</span> <span class="b">entry</span> <span class="f">&amp;&amp;</span> <span class="b">head</span> <span class="f">!=</span> <span class="b">entry</span><span class="f">)</span><span class="f">)</span>
<a name="266" /><span class="Maybe">     266:</span>         <span class="m">return</span><span class="f">;</span>
<a name="267" /><span class="Maybe">     267:</span>     <span class="m">if</span> <span class="f">(</span><span class="b">entry</span> <span class="f">==</span> <span class="b">head</span><span class="f">)</span>
<a name="268" /><span class="Maybe">     268:</span>         <span class="b">INIT_LIST_HEAD</span><span class="f">(</span><span class="b">list</span><span class="f">)</span><span class="f">;</span>
<a name="269" /><span class="Maybe">     269:</span>     <span class="m">else</span>
<a name="270" /><span class="Maybe">     270:</span>         <span class="b">__list_cut_position</span><span class="f">(</span><span class="b">list</span><span class="f">,</span> <span class="b">head</span><span class="f">,</span> <span class="b">entry</span><span class="f">)</span><span class="f">;</span>
<a name="271" /><span class="Maybe">     271:</span> <span class="f">}</span>
<a name="272" /><span class="Maybe">     272:</span> 
<a name="273" /><span class="Maybe">     273:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">__list_splice</span><span class="f">(</span><span class="m">const</span> <span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">list</span><span class="f">,</span>
<a name="274" /><span class="Maybe">     274:</span>                  <span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">prev</span><span class="f">,</span>
<a name="275" /><span class="Maybe">     275:</span>                  <span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">next</span><span class="f">)</span>
<a name="276" /><span class="Maybe">     276:</span> <span class="f">{</span>
<a name="277" /><span class="Maybe">     277:</span>     <span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">first</span> <span class="f">=</span> <span class="b">list</span><span class="f">-&gt;</span><span class="b">next</span><span class="f">;</span>
<a name="278" /><span class="Maybe">     278:</span>     <span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">last</span> <span class="f">=</span> <span class="b">list</span><span class="f">-&gt;</span><span class="b">prev</span><span class="f">;</span>
<a name="279" /><span class="Maybe">     279:</span> 
<a name="280" /><span class="Maybe">     280:</span>     <span class="b">first</span><span class="f">-&gt;</span><span class="b">prev</span> <span class="f">=</span> <span class="b">prev</span><span class="f">;</span>
<a name="281" /><span class="Maybe">     281:</span>     <span class="b">prev</span><span class="f">-&gt;</span><span class="b">next</span> <span class="f">=</span> <span class="b">first</span><span class="f">;</span>
<a name="282" /><span class="Maybe">     282:</span> 
<a name="283" /><span class="Maybe">     283:</span>     <span class="b">last</span><span class="f">-&gt;</span><span class="b">next</span> <span class="f">=</span> <span class="b">next</span><span class="f">;</span>
<a name="284" /><span class="Maybe">     284:</span>     <span class="b">next</span><span class="f">-&gt;</span><span class="b">prev</span> <span class="f">=</span> <span class="b">last</span><span class="f">;</span>
<a name="285" /><span class="Maybe">     285:</span> <span class="f">}</span>
<a name="286" /><span class="Maybe">     286:</span> 
<a name="287" /><span class="Maybe">     287:</span> <span class="k">/**</span>
<a name="288" /><span class="Maybe">     288:</span> <span class="k"> * list_splice - join two lists, this is designed for stacks</span>
<a name="289" /><span class="Maybe">     289:</span> <span class="k"> * @list: the new list to add.</span>
<a name="290" /><span class="Maybe">     290:</span> <span class="k"> * @head: the place to add it in the first list.</span>
<a name="291" /><span class="Maybe">     291:</span> <span class="k"> */</span>
<a name="292" /><span class="Maybe">     292:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">list_splice</span><span class="f">(</span><span class="m">const</span> <span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">list</span><span class="f">,</span>
<a name="293" /><span class="Maybe">     293:</span>                 <span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">head</span><span class="f">)</span>
<a name="294" /><span class="Maybe">     294:</span> <span class="f">{</span>
<a name="295" /><span class="Maybe">     295:</span>     <span class="m">if</span> <span class="f">(</span><span class="f">!</span><span class="b">list_empty</span><span class="f">(</span><span class="b">list</span><span class="f">)</span><span class="f">)</span>
<a name="296" /><span class="Maybe">     296:</span>         <span class="b">__list_splice</span><span class="f">(</span><span class="b">list</span><span class="f">,</span> <span class="b">head</span><span class="f">,</span> <span class="b">head</span><span class="f">-&gt;</span><span class="b">next</span><span class="f">)</span><span class="f">;</span>
<a name="297" /><span class="Maybe">     297:</span> <span class="f">}</span>
<a name="298" /><span class="Maybe">     298:</span> 
<a name="299" /><span class="Maybe">     299:</span> <span class="k">/**</span>
<a name="300" /><span class="Maybe">     300:</span> <span class="k"> * list_splice_tail - join two lists, each list being a queue</span>
<a name="301" /><span class="Maybe">     301:</span> <span class="k"> * @list: the new list to add.</span>
<a name="302" /><span class="Maybe">     302:</span> <span class="k"> * @head: the place to add it in the first list.</span>
<a name="303" /><span class="Maybe">     303:</span> <span class="k"> */</span>
<a name="304" /><span class="Maybe">     304:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">list_splice_tail</span><span class="f">(</span><span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">list</span><span class="f">,</span>
<a name="305" /><span class="Maybe">     305:</span>                 <span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">head</span><span class="f">)</span>
<a name="306" /><span class="Maybe">     306:</span> <span class="f">{</span>
<a name="307" /><span class="Maybe">     307:</span>     <span class="m">if</span> <span class="f">(</span><span class="f">!</span><span class="b">list_empty</span><span class="f">(</span><span class="b">list</span><span class="f">)</span><span class="f">)</span>
<a name="308" /><span class="Maybe">     308:</span>         <span class="b">__list_splice</span><span class="f">(</span><span class="b">list</span><span class="f">,</span> <span class="b">head</span><span class="f">-&gt;</span><span class="b">prev</span><span class="f">,</span> <span class="b">head</span><span class="f">)</span><span class="f">;</span>
<a name="309" /><span class="Maybe">     309:</span> <span class="f">}</span>
<a name="310" /><span class="Maybe">     310:</span> 
<a name="311" /><span class="Maybe">     311:</span> <span class="k">/**</span>
<a name="312" /><span class="Maybe">     312:</span> <span class="k"> * list_splice_init - join two lists and reinitialise the emptied list.</span>
<a name="313" /><span class="Maybe">     313:</span> <span class="k"> * @list: the new list to add.</span>
<a name="314" /><span class="Maybe">     314:</span> <span class="k"> * @head: the place to add it in the first list.</span>
<a name="315" /><span class="Maybe">     315:</span> <span class="k"> *</span>
<a name="316" /><span class="Maybe">     316:</span> <span class="k"> * The list at @list is reinitialised</span>
<a name="317" /><span class="Maybe">     317:</span> <span class="k"> */</span>
<a name="318" /><span class="Maybe">     318:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">list_splice_init</span><span class="f">(</span><span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">list</span><span class="f">,</span>
<a name="319" /><span class="Maybe">     319:</span>                     <span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">head</span><span class="f">)</span>
<a name="320" /><span class="Maybe">     320:</span> <span class="f">{</span>
<a name="321" /><span class="Maybe">     321:</span>     <span class="m">if</span> <span class="f">(</span><span class="f">!</span><span class="b">list_empty</span><span class="f">(</span><span class="b">list</span><span class="f">)</span><span class="f">)</span> <span class="f">{</span>
<a name="322" /><span class="Maybe">     322:</span>         <span class="b">__list_splice</span><span class="f">(</span><span class="b">list</span><span class="f">,</span> <span class="b">head</span><span class="f">,</span> <span class="b">head</span><span class="f">-&gt;</span><span class="b">next</span><span class="f">)</span><span class="f">;</span>
<a name="323" /><span class="Maybe">     323:</span>         <span class="b">INIT_LIST_HEAD</span><span class="f">(</span><span class="b">list</span><span class="f">)</span><span class="f">;</span>
<a name="324" /><span class="Maybe">     324:</span>     <span class="f">}</span>
<a name="325" /><span class="Maybe">     325:</span> <span class="f">}</span>
<a name="326" /><span class="Maybe">     326:</span> 
<a name="327" /><span class="Maybe">     327:</span> <span class="k">/**</span>
<a name="328" /><span class="Maybe">     328:</span> <span class="k"> * list_splice_tail_init - join two lists and reinitialise the emptied list</span>
<a name="329" /><span class="Maybe">     329:</span> <span class="k"> * @list: the new list to add.</span>
<a name="330" /><span class="Maybe">     330:</span> <span class="k"> * @head: the place to add it in the first list.</span>
<a name="331" /><span class="Maybe">     331:</span> <span class="k"> *</span>
<a name="332" /><span class="Maybe">     332:</span> <span class="k"> * Each of the lists is a queue.</span>
<a name="333" /><span class="Maybe">     333:</span> <span class="k"> * The list at @list is reinitialised</span>
<a name="334" /><span class="Maybe">     334:</span> <span class="k"> */</span>
<a name="335" /><span class="Maybe">     335:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">list_splice_tail_init</span><span class="f">(</span><span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">list</span><span class="f">,</span>
<a name="336" /><span class="Maybe">     336:</span>                      <span class="m">struct</span> <span class="b">list_head</span> <span class="f">*</span><span class="b">head</span><span class="f">)</span>
<a name="337" /><span class="Maybe">     337:</span> <span class="f">{</span>
<a name="338" /><span class="Maybe">     338:</span>     <span class="m">if</span> <span class="f">(</span><span class="f">!</span><span class="b">list_empty</span><span class="f">(</span><span class="b">list</span><span class="f">)</span><span class="f">)</span> <span class="f">{</span>
<a name="339" /><span class="Maybe">     339:</span>         <span class="b">__list_splice</span><span class="f">(</span><span class="b">list</span><span class="f">,</span> <span class="b">head</span><span class="f">-&gt;</span><span class="b">prev</span><span class="f">,</span> <span class="b">head</span><span class="f">)</span><span class="f">;</span>
<a name="340" /><span class="Maybe">     340:</span>         <span class="b">INIT_LIST_HEAD</span><span class="f">(</span><span class="b">list</span><span class="f">)</span><span class="f">;</span>
<a name="341" /><span class="Maybe">     341:</span>     <span class="f">}</span>
<a name="342" /><span class="Maybe">     342:</span> <span class="f">}</span>
<a name="343" /><span class="Maybe">     343:</span> 
<a name="344" /><span class="Maybe">     344:</span> <span class="k">/**</span>
<a name="345" /><span class="Maybe">     345:</span> <span class="k"> * list_entry - get the struct for this entry</span>
<a name="346" /><span class="Maybe">     346:</span> <span class="k"> * @ptr:    the &amp;struct list_head pointer.</span>
<a name="347" /><span class="Maybe">     347:</span> <span class="k"> * @type:    the type of the struct this is embedded in.</span>
<a name="348" /><span class="Maybe">     348:</span> <span class="k"> * @member:    the name of the list_struct within the struct.</span>
<a name="349" /><span class="Maybe">     349:</span> <span class="k"> */</span>
<a name="350" /><span class="Maybe">     350:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_bGlzdF9lbnRyeV8w"><span class="b">list_entry</span></a><span class="f">(</span><span class="b">ptr</span><span class="f">,</span> <span class="b">type</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span> \
<a name="351" /><span class="Maybe">     351:</span>     <a href="cpu.c_macros_ref.html#_Y29udGFpbmVyX29mXzA_"><span class="b">container_of</span></a><span class="f">(</span><span class="b">ptr</span><span class="f">,</span> <span class="b">type</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span>
<a name="352" /><span class="Maybe">     352:</span> 
<a name="353" /><span class="Maybe">     353:</span> <span class="k">/**</span>
<a name="354" /><span class="Maybe">     354:</span> <span class="k"> * list_first_entry - get the first element from a list</span>
<a name="355" /><span class="Maybe">     355:</span> <span class="k"> * @ptr:    the list head to take the element from.</span>
<a name="356" /><span class="Maybe">     356:</span> <span class="k"> * @type:    the type of the struct this is embedded in.</span>
<a name="357" /><span class="Maybe">     357:</span> <span class="k"> * @member:    the name of the list_struct within the struct.</span>
<a name="358" /><span class="Maybe">     358:</span> <span class="k"> *</span>
<a name="359" /><span class="Maybe">     359:</span> <span class="k"> * Note, that list is expected to be not empty.</span>
<a name="360" /><span class="Maybe">     360:</span> <span class="k"> */</span>
<a name="361" /><span class="Maybe">     361:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_bGlzdF9maXJzdF9lbnRyeV8w"><span class="b">list_first_entry</span></a><span class="f">(</span><span class="b">ptr</span><span class="f">,</span> <span class="b">type</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span> \
<a name="362" /><span class="Maybe">     362:</span>     <a href="cpu.c_macros_ref.html#_bGlzdF9lbnRyeV8w"><span class="b">list_entry</span></a><span class="f">(</span><span class="f">(</span><span class="b">ptr</span><span class="f">)</span><span class="f">-&gt;</span><span class="b">next</span><span class="f">,</span> <span class="b">type</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span>
<a name="363" /><span class="Maybe">     363:</span> 
<a name="364" /><span class="Maybe">     364:</span> <span class="k">/**</span>
<a name="365" /><span class="Maybe">     365:</span> <span class="k"> * list_last_entry - get the last element from a list</span>
<a name="366" /><span class="Maybe">     366:</span> <span class="k"> * @ptr:    the list head to take the element from.</span>
<a name="367" /><span class="Maybe">     367:</span> <span class="k"> * @type:    the type of the struct this is embedded in.</span>
<a name="368" /><span class="Maybe">     368:</span> <span class="k"> * @member:    the name of the list_struct within the struct.</span>
<a name="369" /><span class="Maybe">     369:</span> <span class="k"> *</span>
<a name="370" /><span class="Maybe">     370:</span> <span class="k"> * Note, that list is expected to be not empty.</span>
<a name="371" /><span class="Maybe">     371:</span> <span class="k"> */</span>
<a name="372" /><span class="Maybe">     372:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_bGlzdF9sYXN0X2VudHJ5XzA_"><span class="b">list_last_entry</span></a><span class="f">(</span><span class="b">ptr</span><span class="f">,</span> <span class="b">type</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span> \
<a name="373" /><span class="Maybe">     373:</span>     <a href="cpu.c_macros_ref.html#_bGlzdF9lbnRyeV8w"><span class="b">list_entry</span></a><span class="f">(</span><span class="f">(</span><span class="b">ptr</span><span class="f">)</span><span class="f">-&gt;</span><span class="b">prev</span><span class="f">,</span> <span class="b">type</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span>
<a name="374" /><span class="Maybe">     374:</span> 
<a name="375" /><span class="Maybe">     375:</span> <span class="k">/**</span>
<a name="376" /><span class="Maybe">     376:</span> <span class="k"> * list_first_entry_or_null - get the first element from a list</span>
<a name="377" /><span class="Maybe">     377:</span> <span class="k"> * @ptr:    the list head to take the element from.</span>
<a name="378" /><span class="Maybe">     378:</span> <span class="k"> * @type:    the type of the struct this is embedded in.</span>
<a name="379" /><span class="Maybe">     379:</span> <span class="k"> * @member:    the name of the list_struct within the struct.</span>
<a name="380" /><span class="Maybe">     380:</span> <span class="k"> *</span>
<a name="381" /><span class="Maybe">     381:</span> <span class="k"> * Note that if the list is empty, it returns NULL.</span>
<a name="382" /><span class="Maybe">     382:</span> <span class="k"> */</span>
<a name="383" /><span class="Maybe">     383:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_bGlzdF9maXJzdF9lbnRyeV9vcl9udWxsXzA_"><span class="b">list_first_entry_or_null</span></a><span class="f">(</span><span class="b">ptr</span><span class="f">,</span> <span class="b">type</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span> \
<a name="384" /><span class="Maybe">     384:</span>     <span class="f">(</span><span class="f">!</span><span class="b">list_empty</span><span class="f">(</span><span class="b">ptr</span><span class="f">)</span> <span class="f">?</span> <a href="cpu.c_macros_ref.html#_bGlzdF9maXJzdF9lbnRyeV8w"><span class="b">list_first_entry</span></a><span class="f">(</span><span class="b">ptr</span><span class="f">,</span> <span class="b">type</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span> <span class="f">:</span> <a href="cpu.c_macros_ref.html#_TlVMTF8w"><span class="b">NULL</span></a><span class="f">)</span>
<a name="385" /><span class="Maybe">     385:</span> 
<a name="386" /><span class="Maybe">     386:</span> <span class="k">/**</span>
<a name="387" /><span class="Maybe">     387:</span> <span class="k"> * list_next_entry - get the next element in list</span>
<a name="388" /><span class="Maybe">     388:</span> <span class="k"> * @pos:    the type * to cursor</span>
<a name="389" /><span class="Maybe">     389:</span> <span class="k"> * @member:    the name of the list_struct within the struct.</span>
<a name="390" /><span class="Maybe">     390:</span> <span class="k"> */</span>
<a name="391" /><span class="Maybe">     391:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_bGlzdF9uZXh0X2VudHJ5XzA_"><span class="b">list_next_entry</span></a><span class="f">(</span><span class="b">pos</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span> \
<a name="392" /><span class="Maybe">     392:</span>     <a href="cpu.c_macros_ref.html#_bGlzdF9lbnRyeV8w"><span class="b">list_entry</span></a><span class="f">(</span><span class="f">(</span><span class="b">pos</span><span class="f">)</span><span class="f">-&gt;</span><span class="b">member</span><span class="f">.</span><span class="b">next</span><span class="f">,</span> <span class="b">typeof</span><span class="f">(</span><span class="f">*</span><span class="f">(</span><span class="b">pos</span><span class="f">)</span><span class="f">)</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span>
<a name="393" /><span class="Maybe">     393:</span> 
<a name="394" /><span class="Maybe">     394:</span> <span class="k">/**</span>
<a name="395" /><span class="Maybe">     395:</span> <span class="k"> * list_prev_entry - get the prev element in list</span>
<a name="396" /><span class="Maybe">     396:</span> <span class="k"> * @pos:    the type * to cursor</span>
<a name="397" /><span class="Maybe">     397:</span> <span class="k"> * @member:    the name of the list_struct within the struct.</span>
<a name="398" /><span class="Maybe">     398:</span> <span class="k"> */</span>
<a name="399" /><span class="Maybe">     399:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_bGlzdF9wcmV2X2VudHJ5XzA_"><span class="b">list_prev_entry</span></a><span class="f">(</span><span class="b">pos</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span> \
<a name="400" /><span class="Maybe">     400:</span>     <a href="cpu.c_macros_ref.html#_bGlzdF9lbnRyeV8w"><span class="b">list_entry</span></a><span class="f">(</span><span class="f">(</span><span class="b">pos</span><span class="f">)</span><span class="f">-&gt;</span><span class="b">member</span><span class="f">.</span><span class="b">prev</span><span class="f">,</span> <span class="b">typeof</span><span class="f">(</span><span class="f">*</span><span class="f">(</span><span class="b">pos</span><span class="f">)</span><span class="f">)</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span>
<a name="401" /><span class="Maybe">     401:</span> 
<a name="402" /><span class="Maybe">     402:</span> <span class="k">/**</span>
<a name="403" /><span class="Maybe">     403:</span> <span class="k"> * list_for_each    -    iterate over a list</span>
<a name="404" /><span class="Maybe">     404:</span> <span class="k"> * @pos:    the &amp;struct list_head to use as a loop cursor.</span>
<a name="405" /><span class="Maybe">     405:</span> <span class="k"> * @head:    the head for your list.</span>
<a name="406" /><span class="Maybe">     406:</span> <span class="k"> */</span>
<a name="407" /><span class="Maybe">     407:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_bGlzdF9mb3JfZWFjaF8w"><span class="b">list_for_each</span></a><span class="f">(</span><span class="b">pos</span><span class="f">,</span> <span class="b">head</span><span class="f">)</span> \
<a name="408" /><span class="Maybe">     408:</span>     <span class="m">for</span> <span class="f">(</span><span class="b">pos</span> <span class="f">=</span> <span class="f">(</span><span class="b">head</span><span class="f">)</span><span class="f">-&gt;</span><span class="b">next</span><span class="f">;</span> <span class="b">pos</span> <span class="f">!=</span> <span class="f">(</span><span class="b">head</span><span class="f">)</span><span class="f">;</span> <span class="b">pos</span> <span class="f">=</span> <span class="b">pos</span><span class="f">-&gt;</span><span class="b">next</span><span class="f">)</span>
<a name="409" /><span class="Maybe">     409:</span> 
<a name="410" /><span class="Maybe">     410:</span> <span class="k">/**</span>
<a name="411" /><span class="Maybe">     411:</span> <span class="k"> * list_for_each_prev    -    iterate over a list backwards</span>
<a name="412" /><span class="Maybe">     412:</span> <span class="k"> * @pos:    the &amp;struct list_head to use as a loop cursor.</span>
<a name="413" /><span class="Maybe">     413:</span> <span class="k"> * @head:    the head for your list.</span>
<a name="414" /><span class="Maybe">     414:</span> <span class="k"> */</span>
<a name="415" /><span class="Maybe">     415:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_bGlzdF9mb3JfZWFjaF9wcmV2XzA_"><span class="b">list_for_each_prev</span></a><span class="f">(</span><span class="b">pos</span><span class="f">,</span> <span class="b">head</span><span class="f">)</span> \
<a name="416" /><span class="Maybe">     416:</span>     <span class="m">for</span> <span class="f">(</span><span class="b">pos</span> <span class="f">=</span> <span class="f">(</span><span class="b">head</span><span class="f">)</span><span class="f">-&gt;</span><span class="b">prev</span><span class="f">;</span> <span class="b">pos</span> <span class="f">!=</span> <span class="f">(</span><span class="b">head</span><span class="f">)</span><span class="f">;</span> <span class="b">pos</span> <span class="f">=</span> <span class="b">pos</span><span class="f">-&gt;</span><span class="b">prev</span><span class="f">)</span>
<a name="417" /><span class="Maybe">     417:</span> 
<a name="418" /><span class="Maybe">     418:</span> <span class="k">/**</span>
<a name="419" /><span class="Maybe">     419:</span> <span class="k"> * list_for_each_safe - iterate over a list safe against removal of list entry</span>
<a name="420" /><span class="Maybe">     420:</span> <span class="k"> * @pos:    the &amp;struct list_head to use as a loop cursor.</span>
<a name="421" /><span class="Maybe">     421:</span> <span class="k"> * @n:        another &amp;struct list_head to use as temporary storage</span>
<a name="422" /><span class="Maybe">     422:</span> <span class="k"> * @head:    the head for your list.</span>
<a name="423" /><span class="Maybe">     423:</span> <span class="k"> */</span>
<a name="424" /><span class="Maybe">     424:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_bGlzdF9mb3JfZWFjaF9zYWZlXzA_"><span class="b">list_for_each_safe</span></a><span class="f">(</span><span class="b">pos</span><span class="f">,</span> <span class="b">n</span><span class="f">,</span> <span class="b">head</span><span class="f">)</span> \
<a name="425" /><span class="Maybe">     425:</span>     <span class="m">for</span> <span class="f">(</span><span class="b">pos</span> <span class="f">=</span> <span class="f">(</span><span class="b">head</span><span class="f">)</span><span class="f">-&gt;</span><span class="b">next</span><span class="f">,</span> <span class="b">n</span> <span class="f">=</span> <span class="b">pos</span><span class="f">-&gt;</span><span class="b">next</span><span class="f">;</span> <span class="b">pos</span> <span class="f">!=</span> <span class="f">(</span><span class="b">head</span><span class="f">)</span><span class="f">;</span> \
<a name="426" /><span class="Maybe">     426:</span>         <span class="b">pos</span> <span class="f">=</span> <span class="b">n</span><span class="f">,</span> <span class="b">n</span> <span class="f">=</span> <span class="b">pos</span><span class="f">-&gt;</span><span class="b">next</span><span class="f">)</span>
<a name="427" /><span class="Maybe">     427:</span> 
<a name="428" /><span class="Maybe">     428:</span> <span class="k">/**</span>
<a name="429" /><span class="Maybe">     429:</span> <span class="k"> * list_for_each_prev_safe - iterate over a list backwards safe against removal of list entry</span>
<a name="430" /><span class="Maybe">     430:</span> <span class="k"> * @pos:    the &amp;struct list_head to use as a loop cursor.</span>
<a name="431" /><span class="Maybe">     431:</span> <span class="k"> * @n:        another &amp;struct list_head to use as temporary storage</span>
<a name="432" /><span class="Maybe">     432:</span> <span class="k"> * @head:    the head for your list.</span>
<a name="433" /><span class="Maybe">     433:</span> <span class="k"> */</span>
<a name="434" /><span class="Maybe">     434:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_bGlzdF9mb3JfZWFjaF9wcmV2X3NhZmVfMA__"><span class="b">list_for_each_prev_safe</span></a><span class="f">(</span><span class="b">pos</span><span class="f">,</span> <span class="b">n</span><span class="f">,</span> <span class="b">head</span><span class="f">)</span> \
<a name="435" /><span class="Maybe">     435:</span>     <span class="m">for</span> <span class="f">(</span><span class="b">pos</span> <span class="f">=</span> <span class="f">(</span><span class="b">head</span><span class="f">)</span><span class="f">-&gt;</span><span class="b">prev</span><span class="f">,</span> <span class="b">n</span> <span class="f">=</span> <span class="b">pos</span><span class="f">-&gt;</span><span class="b">prev</span><span class="f">;</span> \
<a name="436" /><span class="Maybe">     436:</span>          <span class="b">pos</span> <span class="f">!=</span> <span class="f">(</span><span class="b">head</span><span class="f">)</span><span class="f">;</span> \
<a name="437" /><span class="Maybe">     437:</span>          <span class="b">pos</span> <span class="f">=</span> <span class="b">n</span><span class="f">,</span> <span class="b">n</span> <span class="f">=</span> <span class="b">pos</span><span class="f">-&gt;</span><span class="b">prev</span><span class="f">)</span>
<a name="438" /><span class="Maybe">     438:</span> 
<a name="439" /><span class="Maybe">     439:</span> <span class="k">/**</span>
<a name="440" /><span class="Maybe">     440:</span> <span class="k"> * list_for_each_entry    -    iterate over list of given type</span>
<a name="441" /><span class="Maybe">     441:</span> <span class="k"> * @pos:    the type * to use as a loop cursor.</span>
<a name="442" /><span class="Maybe">     442:</span> <span class="k"> * @head:    the head for your list.</span>
<a name="443" /><span class="Maybe">     443:</span> <span class="k"> * @member:    the name of the list_struct within the struct.</span>
<a name="444" /><span class="Maybe">     444:</span> <span class="k"> */</span>
<a name="445" /><span class="Maybe">     445:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_bGlzdF9mb3JfZWFjaF9lbnRyeV8w"><span class="b">list_for_each_entry</span></a><span class="f">(</span><span class="b">pos</span><span class="f">,</span> <span class="b">head</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span>                \
<a name="446" /><span class="Maybe">     446:</span>     <span class="m">for</span> <span class="f">(</span><span class="b">pos</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_bGlzdF9maXJzdF9lbnRyeV8w"><span class="b">list_first_entry</span></a><span class="f">(</span><span class="b">head</span><span class="f">,</span> <span class="b">typeof</span><span class="f">(</span><span class="f">*</span><span class="b">pos</span><span class="f">)</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span><span class="f">;</span>    \
<a name="447" /><span class="Maybe">     447:</span>          <span class="f">&amp;</span><span class="b">pos</span><span class="f">-&gt;</span><span class="b">member</span> <span class="f">!=</span> <span class="f">(</span><span class="b">head</span><span class="f">)</span><span class="f">;</span>                    \
<a name="448" /><span class="Maybe">     448:</span>          <span class="b">pos</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_bGlzdF9uZXh0X2VudHJ5XzA_"><span class="b">list_next_entry</span></a><span class="f">(</span><span class="b">pos</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span><span class="f">)</span>
<a name="449" /><span class="Maybe">     449:</span> 
<a name="450" /><span class="Maybe">     450:</span> <span class="k">/**</span>
<a name="451" /><span class="Maybe">     451:</span> <span class="k"> * list_for_each_entry_reverse - iterate backwards over list of given type.</span>
<a name="452" /><span class="Maybe">     452:</span> <span class="k"> * @pos:    the type * to use as a loop cursor.</span>
<a name="453" /><span class="Maybe">     453:</span> <span class="k"> * @head:    the head for your list.</span>
<a name="454" /><span class="Maybe">     454:</span> <span class="k"> * @member:    the name of the list_struct within the struct.</span>
<a name="455" /><span class="Maybe">     455:</span> <span class="k"> */</span>
<a name="456" /><span class="Maybe">     456:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlXzA_"><span class="b">list_for_each_entry_reverse</span></a><span class="f">(</span><span class="b">pos</span><span class="f">,</span> <span class="b">head</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span>            \
<a name="457" /><span class="Maybe">     457:</span>     <span class="m">for</span> <span class="f">(</span><span class="b">pos</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_bGlzdF9sYXN0X2VudHJ5XzA_"><span class="b">list_last_entry</span></a><span class="f">(</span><span class="b">head</span><span class="f">,</span> <span class="b">typeof</span><span class="f">(</span><span class="f">*</span><span class="b">pos</span><span class="f">)</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span><span class="f">;</span>        \
<a name="458" /><span class="Maybe">     458:</span>          <span class="f">&amp;</span><span class="b">pos</span><span class="f">-&gt;</span><span class="b">member</span> <span class="f">!=</span> <span class="f">(</span><span class="b">head</span><span class="f">)</span><span class="f">;</span>                     \
<a name="459" /><span class="Maybe">     459:</span>          <span class="b">pos</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_bGlzdF9wcmV2X2VudHJ5XzA_"><span class="b">list_prev_entry</span></a><span class="f">(</span><span class="b">pos</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span><span class="f">)</span>
<a name="460" /><span class="Maybe">     460:</span> 
<a name="461" /><span class="Maybe">     461:</span> <span class="k">/**</span>
<a name="462" /><span class="Maybe">     462:</span> <span class="k"> * list_prepare_entry - prepare a pos entry for use in list_for_each_entry_continue()</span>
<a name="463" /><span class="Maybe">     463:</span> <span class="k"> * @pos:    the type * to use as a start point</span>
<a name="464" /><span class="Maybe">     464:</span> <span class="k"> * @head:    the head of the list</span>
<a name="465" /><span class="Maybe">     465:</span> <span class="k"> * @member:    the name of the list_struct within the struct.</span>
<a name="466" /><span class="Maybe">     466:</span> <span class="k"> *</span>
<a name="467" /><span class="Maybe">     467:</span> <span class="k"> * Prepares a pos entry for use as a start point in list_for_each_entry_continue().</span>
<a name="468" /><span class="Maybe">     468:</span> <span class="k"> */</span>
<a name="469" /><span class="Maybe">     469:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_bGlzdF9wcmVwYXJlX2VudHJ5XzA_"><span class="b">list_prepare_entry</span></a><span class="f">(</span><span class="b">pos</span><span class="f">,</span> <span class="b">head</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span> \
<a name="470" /><span class="Maybe">     470:</span>     <span class="f">(</span><span class="f">(</span><span class="b">pos</span><span class="f">)</span> <span class="f">?</span> <span class="f">:</span> <a href="cpu.c_macros_ref.html#_bGlzdF9lbnRyeV8w"><span class="b">list_entry</span></a><span class="f">(</span><span class="b">head</span><span class="f">,</span> <span class="b">typeof</span><span class="f">(</span><span class="f">*</span><span class="b">pos</span><span class="f">)</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span><span class="f">)</span>
<a name="471" /><span class="Maybe">     471:</span> 
<a name="472" /><span class="Maybe">     472:</span> <span class="k">/**</span>
<a name="473" /><span class="Maybe">     473:</span> <span class="k"> * list_for_each_entry_continue - continue iteration over list of given type</span>
<a name="474" /><span class="Maybe">     474:</span> <span class="k"> * @pos:    the type * to use as a loop cursor.</span>
<a name="475" /><span class="Maybe">     475:</span> <span class="k"> * @head:    the head for your list.</span>
<a name="476" /><span class="Maybe">     476:</span> <span class="k"> * @member:    the name of the list_struct within the struct.</span>
<a name="477" /><span class="Maybe">     477:</span> <span class="k"> *</span>
<a name="478" /><span class="Maybe">     478:</span> <span class="k"> * Continue to iterate over list of given type, continuing after</span>
<a name="479" /><span class="Maybe">     479:</span> <span class="k"> * the current position.</span>
<a name="480" /><span class="Maybe">     480:</span> <span class="k"> */</span>
<a name="481" /><span class="Maybe">     481:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV8w"><span class="b">list_for_each_entry_continue</span></a><span class="f">(</span><span class="b">pos</span><span class="f">,</span> <span class="b">head</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span>         \
<a name="482" /><span class="Maybe">     482:</span>     <span class="m">for</span> <span class="f">(</span><span class="b">pos</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_bGlzdF9uZXh0X2VudHJ5XzA_"><span class="b">list_next_entry</span></a><span class="f">(</span><span class="b">pos</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span><span class="f">;</span>            \
<a name="483" /><span class="Maybe">     483:</span>          <span class="f">&amp;</span><span class="b">pos</span><span class="f">-&gt;</span><span class="b">member</span> <span class="f">!=</span> <span class="f">(</span><span class="b">head</span><span class="f">)</span><span class="f">;</span>                    \
<a name="484" /><span class="Maybe">     484:</span>          <span class="b">pos</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_bGlzdF9uZXh0X2VudHJ5XzA_"><span class="b">list_next_entry</span></a><span class="f">(</span><span class="b">pos</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span><span class="f">)</span>
<a name="485" /><span class="Maybe">     485:</span> 
<a name="486" /><span class="Maybe">     486:</span> <span class="k">/**</span>
<a name="487" /><span class="Maybe">     487:</span> <span class="k"> * list_for_each_entry_continue_reverse - iterate backwards from the given point</span>
<a name="488" /><span class="Maybe">     488:</span> <span class="k"> * @pos:    the type * to use as a loop cursor.</span>
<a name="489" /><span class="Maybe">     489:</span> <span class="k"> * @head:    the head for your list.</span>
<a name="490" /><span class="Maybe">     490:</span> <span class="k"> * @member:    the name of the list_struct within the struct.</span>
<a name="491" /><span class="Maybe">     491:</span> <span class="k"> *</span>
<a name="492" /><span class="Maybe">     492:</span> <span class="k"> * Start to iterate over list of given type backwards, continuing after</span>
<a name="493" /><span class="Maybe">     493:</span> <span class="k"> * the current position.</span>
<a name="494" /><span class="Maybe">     494:</span> <span class="k"> */</span>
<a name="495" /><span class="Maybe">     495:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yZXZlcnNlXzA_"><span class="b">list_for_each_entry_continue_reverse</span></a><span class="f">(</span><span class="b">pos</span><span class="f">,</span> <span class="b">head</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span>        \
<a name="496" /><span class="Maybe">     496:</span>     <span class="m">for</span> <span class="f">(</span><span class="b">pos</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_bGlzdF9wcmV2X2VudHJ5XzA_"><span class="b">list_prev_entry</span></a><span class="f">(</span><span class="b">pos</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span><span class="f">;</span>            \
<a name="497" /><span class="Maybe">     497:</span>          <span class="f">&amp;</span><span class="b">pos</span><span class="f">-&gt;</span><span class="b">member</span> <span class="f">!=</span> <span class="f">(</span><span class="b">head</span><span class="f">)</span><span class="f">;</span>                    \
<a name="498" /><span class="Maybe">     498:</span>          <span class="b">pos</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_bGlzdF9wcmV2X2VudHJ5XzA_"><span class="b">list_prev_entry</span></a><span class="f">(</span><span class="b">pos</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span><span class="f">)</span>
<a name="499" /><span class="Maybe">     499:</span> 
<a name="500" /><span class="Maybe">     500:</span> <span class="k">/**</span>
<a name="501" /><span class="Maybe">     501:</span> <span class="k"> * list_for_each_entry_from - iterate over list of given type from the current point</span>
<a name="502" /><span class="Maybe">     502:</span> <span class="k"> * @pos:    the type * to use as a loop cursor.</span>
<a name="503" /><span class="Maybe">     503:</span> <span class="k"> * @head:    the head for your list.</span>
<a name="504" /><span class="Maybe">     504:</span> <span class="k"> * @member:    the name of the list_struct within the struct.</span>
<a name="505" /><span class="Maybe">     505:</span> <span class="k"> *</span>
<a name="506" /><span class="Maybe">     506:</span> <span class="k"> * Iterate over list of given type, continuing from current position.</span>
<a name="507" /><span class="Maybe">     507:</span> <span class="k"> */</span>
<a name="508" /><span class="Maybe">     508:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_bGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tXzA_"><span class="b">list_for_each_entry_from</span></a><span class="f">(</span><span class="b">pos</span><span class="f">,</span> <span class="b">head</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span>             \
<a name="509" /><span class="Maybe">     509:</span>     <span class="m">for</span> <span class="f">(</span><span class="f">;</span> <span class="f">&amp;</span><span class="b">pos</span><span class="f">-&gt;</span><span class="b">member</span> <span class="f">!=</span> <span class="f">(</span><span class="b">head</span><span class="f">)</span><span class="f">;</span>                    \
<a name="510" /><span class="Maybe">     510:</span>          <span class="b">pos</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_bGlzdF9uZXh0X2VudHJ5XzA_"><span class="b">list_next_entry</span></a><span class="f">(</span><span class="b">pos</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span><span class="f">)</span>
<a name="511" /><span class="Maybe">     511:</span> 
<a name="512" /><span class="Maybe">     512:</span> <span class="k">/**</span>
<a name="513" /><span class="Maybe">     513:</span> <span class="k"> * list_for_each_entry_safe - iterate over list of given type safe against removal of list entry</span>
<a name="514" /><span class="Maybe">     514:</span> <span class="k"> * @pos:    the type * to use as a loop cursor.</span>
<a name="515" /><span class="Maybe">     515:</span> <span class="k"> * @n:        another type * to use as temporary storage</span>
<a name="516" /><span class="Maybe">     516:</span> <span class="k"> * @head:    the head for your list.</span>
<a name="517" /><span class="Maybe">     517:</span> <span class="k"> * @member:    the name of the list_struct within the struct.</span>
<a name="518" /><span class="Maybe">     518:</span> <span class="k"> */</span>
<a name="519" /><span class="Maybe">     519:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlXzA_"><span class="b">list_for_each_entry_safe</span></a><span class="f">(</span><span class="b">pos</span><span class="f">,</span> <span class="b">n</span><span class="f">,</span> <span class="b">head</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span>            \
<a name="520" /><span class="Maybe">     520:</span>     <span class="m">for</span> <span class="f">(</span><span class="b">pos</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_bGlzdF9maXJzdF9lbnRyeV8w"><span class="b">list_first_entry</span></a><span class="f">(</span><span class="b">head</span><span class="f">,</span> <span class="b">typeof</span><span class="f">(</span><span class="f">*</span><span class="b">pos</span><span class="f">)</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span><span class="f">,</span>    \
<a name="521" /><span class="Maybe">     521:</span>         <span class="b">n</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_bGlzdF9uZXh0X2VudHJ5XzA_"><span class="b">list_next_entry</span></a><span class="f">(</span><span class="b">pos</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span><span class="f">;</span>            \
<a name="522" /><span class="Maybe">     522:</span>          <span class="f">&amp;</span><span class="b">pos</span><span class="f">-&gt;</span><span class="b">member</span> <span class="f">!=</span> <span class="f">(</span><span class="b">head</span><span class="f">)</span><span class="f">;</span>                     \
<a name="523" /><span class="Maybe">     523:</span>          <span class="b">pos</span> <span class="f">=</span> <span class="b">n</span><span class="f">,</span> <span class="b">n</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_bGlzdF9uZXh0X2VudHJ5XzA_"><span class="b">list_next_entry</span></a><span class="f">(</span><span class="b">n</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span><span class="f">)</span>
<a name="524" /><span class="Maybe">     524:</span> 
<a name="525" /><span class="Maybe">     525:</span> <span class="k">/**</span>
<a name="526" /><span class="Maybe">     526:</span> <span class="k"> * list_for_each_entry_safe_continue - continue list iteration safe against removal</span>
<a name="527" /><span class="Maybe">     527:</span> <span class="k"> * @pos:    the type * to use as a loop cursor.</span>
<a name="528" /><span class="Maybe">     528:</span> <span class="k"> * @n:        another type * to use as temporary storage</span>
<a name="529" /><span class="Maybe">     529:</span> <span class="k"> * @head:    the head for your list.</span>
<a name="530" /><span class="Maybe">     530:</span> <span class="k"> * @member:    the name of the list_struct within the struct.</span>
<a name="531" /><span class="Maybe">     531:</span> <span class="k"> *</span>
<a name="532" /><span class="Maybe">     532:</span> <span class="k"> * Iterate over list of given type, continuing after current point,</span>
<a name="533" /><span class="Maybe">     533:</span> <span class="k"> * safe against removal of list entry.</span>
<a name="534" /><span class="Maybe">     534:</span> <span class="k"> */</span>
<a name="535" /><span class="Maybe">     535:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX2NvbnRpbnVlXzA_"><span class="b">list_for_each_entry_safe_continue</span></a><span class="f">(</span><span class="b">pos</span><span class="f">,</span> <span class="b">n</span><span class="f">,</span> <span class="b">head</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span>         \
<a name="536" /><span class="Maybe">     536:</span>     <span class="m">for</span> <span class="f">(</span><span class="b">pos</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_bGlzdF9uZXh0X2VudHJ5XzA_"><span class="b">list_next_entry</span></a><span class="f">(</span><span class="b">pos</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span><span class="f">,</span>                 \
<a name="537" /><span class="Maybe">     537:</span>         <span class="b">n</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_bGlzdF9uZXh0X2VudHJ5XzA_"><span class="b">list_next_entry</span></a><span class="f">(</span><span class="b">pos</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span><span class="f">;</span>                \
<a name="538" /><span class="Maybe">     538:</span>          <span class="f">&amp;</span><span class="b">pos</span><span class="f">-&gt;</span><span class="b">member</span> <span class="f">!=</span> <span class="f">(</span><span class="b">head</span><span class="f">)</span><span class="f">;</span>                        \
<a name="539" /><span class="Maybe">     539:</span>          <span class="b">pos</span> <span class="f">=</span> <span class="b">n</span><span class="f">,</span> <span class="b">n</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_bGlzdF9uZXh0X2VudHJ5XzA_"><span class="b">list_next_entry</span></a><span class="f">(</span><span class="b">n</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span><span class="f">)</span>
<a name="540" /><span class="Maybe">     540:</span> 
<a name="541" /><span class="Maybe">     541:</span> <span class="k">/**</span>
<a name="542" /><span class="Maybe">     542:</span> <span class="k"> * list_for_each_entry_safe_from - iterate over list from current point safe against removal</span>
<a name="543" /><span class="Maybe">     543:</span> <span class="k"> * @pos:    the type * to use as a loop cursor.</span>
<a name="544" /><span class="Maybe">     544:</span> <span class="k"> * @n:        another type * to use as temporary storage</span>
<a name="545" /><span class="Maybe">     545:</span> <span class="k"> * @head:    the head for your list.</span>
<a name="546" /><span class="Maybe">     546:</span> <span class="k"> * @member:    the name of the list_struct within the struct.</span>
<a name="547" /><span class="Maybe">     547:</span> <span class="k"> *</span>
<a name="548" /><span class="Maybe">     548:</span> <span class="k"> * Iterate over list of given type from current point, safe against</span>
<a name="549" /><span class="Maybe">     549:</span> <span class="k"> * removal of list entry.</span>
<a name="550" /><span class="Maybe">     550:</span> <span class="k"> */</span>
<a name="551" /><span class="Maybe">     551:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX2Zyb21fMA__"><span class="b">list_for_each_entry_safe_from</span></a><span class="f">(</span><span class="b">pos</span><span class="f">,</span> <span class="b">n</span><span class="f">,</span> <span class="b">head</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span>             \
<a name="552" /><span class="Maybe">     552:</span>     <span class="m">for</span> <span class="f">(</span><span class="b">n</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_bGlzdF9uZXh0X2VudHJ5XzA_"><span class="b">list_next_entry</span></a><span class="f">(</span><span class="b">pos</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span><span class="f">;</span>                    \
<a name="553" /><span class="Maybe">     553:</span>          <span class="f">&amp;</span><span class="b">pos</span><span class="f">-&gt;</span><span class="b">member</span> <span class="f">!=</span> <span class="f">(</span><span class="b">head</span><span class="f">)</span><span class="f">;</span>                        \
<a name="554" /><span class="Maybe">     554:</span>          <span class="b">pos</span> <span class="f">=</span> <span class="b">n</span><span class="f">,</span> <span class="b">n</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_bGlzdF9uZXh0X2VudHJ5XzA_"><span class="b">list_next_entry</span></a><span class="f">(</span><span class="b">n</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span><span class="f">)</span>
<a name="555" /><span class="Maybe">     555:</span> 
<a name="556" /><span class="Maybe">     556:</span> <span class="k">/**</span>
<a name="557" /><span class="Maybe">     557:</span> <span class="k"> * list_for_each_entry_safe_reverse - iterate backwards over list safe against removal</span>
<a name="558" /><span class="Maybe">     558:</span> <span class="k"> * @pos:    the type * to use as a loop cursor.</span>
<a name="559" /><span class="Maybe">     559:</span> <span class="k"> * @n:        another type * to use as temporary storage</span>
<a name="560" /><span class="Maybe">     560:</span> <span class="k"> * @head:    the head for your list.</span>
<a name="561" /><span class="Maybe">     561:</span> <span class="k"> * @member:    the name of the list_struct within the struct.</span>
<a name="562" /><span class="Maybe">     562:</span> <span class="k"> *</span>
<a name="563" /><span class="Maybe">     563:</span> <span class="k"> * Iterate backwards over list of given type, safe against removal</span>
<a name="564" /><span class="Maybe">     564:</span> <span class="k"> * of list entry.</span>
<a name="565" /><span class="Maybe">     565:</span> <span class="k"> */</span>
<a name="566" /><span class="Maybe">     566:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2VfMA__"><span class="b">list_for_each_entry_safe_reverse</span></a><span class="f">(</span><span class="b">pos</span><span class="f">,</span> <span class="b">n</span><span class="f">,</span> <span class="b">head</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span>        \
<a name="567" /><span class="Maybe">     567:</span>     <span class="m">for</span> <span class="f">(</span><span class="b">pos</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_bGlzdF9sYXN0X2VudHJ5XzA_"><span class="b">list_last_entry</span></a><span class="f">(</span><span class="b">head</span><span class="f">,</span> <span class="b">typeof</span><span class="f">(</span><span class="f">*</span><span class="b">pos</span><span class="f">)</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span><span class="f">,</span>        \
<a name="568" /><span class="Maybe">     568:</span>         <span class="b">n</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_bGlzdF9wcmV2X2VudHJ5XzA_"><span class="b">list_prev_entry</span></a><span class="f">(</span><span class="b">pos</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span><span class="f">;</span>            \
<a name="569" /><span class="Maybe">     569:</span>          <span class="f">&amp;</span><span class="b">pos</span><span class="f">-&gt;</span><span class="b">member</span> <span class="f">!=</span> <span class="f">(</span><span class="b">head</span><span class="f">)</span><span class="f">;</span>                     \
<a name="570" /><span class="Maybe">     570:</span>          <span class="b">pos</span> <span class="f">=</span> <span class="b">n</span><span class="f">,</span> <span class="b">n</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_bGlzdF9wcmV2X2VudHJ5XzA_"><span class="b">list_prev_entry</span></a><span class="f">(</span><span class="b">n</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span><span class="f">)</span>
<a name="571" /><span class="Maybe">     571:</span> 
<a name="572" /><span class="Maybe">     572:</span> <span class="k">/**</span>
<a name="573" /><span class="Maybe">     573:</span> <span class="k"> * list_safe_reset_next - reset a stale list_for_each_entry_safe loop</span>
<a name="574" /><span class="Maybe">     574:</span> <span class="k"> * @pos:    the loop cursor used in the list_for_each_entry_safe loop</span>
<a name="575" /><span class="Maybe">     575:</span> <span class="k"> * @n:        temporary storage used in list_for_each_entry_safe</span>
<a name="576" /><span class="Maybe">     576:</span> <span class="k"> * @member:    the name of the list_struct within the struct.</span>
<a name="577" /><span class="Maybe">     577:</span> <span class="k"> *</span>
<a name="578" /><span class="Maybe">     578:</span> <span class="k"> * list_safe_reset_next is not safe to use in general if the list may be</span>
<a name="579" /><span class="Maybe">     579:</span> <span class="k"> * modified concurrently (eg. the lock is dropped in the loop body). An</span>
<a name="580" /><span class="Maybe">     580:</span> <span class="k"> * exception to this is if the cursor element (pos) is pinned in the list,</span>
<a name="581" /><span class="Maybe">     581:</span> <span class="k"> * and list_safe_reset_next is called after re-taking the lock and before</span>
<a name="582" /><span class="Maybe">     582:</span> <span class="k"> * completing the current iteration of the loop body.</span>
<a name="583" /><span class="Maybe">     583:</span> <span class="k"> */</span>
<a name="584" /><span class="Maybe">     584:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_bGlzdF9zYWZlX3Jlc2V0X25leHRfMA__"><span class="b">list_safe_reset_next</span></a><span class="f">(</span><span class="b">pos</span><span class="f">,</span> <span class="b">n</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span>                \
<a name="585" /><span class="Maybe">     585:</span>     <span class="b">n</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_bGlzdF9uZXh0X2VudHJ5XzA_"><span class="b">list_next_entry</span></a><span class="f">(</span><span class="b">pos</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span>
<a name="586" /><span class="Maybe">     586:</span> 
<a name="587" /><span class="Maybe">     587:</span> <span class="k">/*</span>
<a name="588" /><span class="Maybe">     588:</span> <span class="k"> * Double linked lists with a single pointer list head.</span>
<a name="589" /><span class="Maybe">     589:</span> <span class="k"> * Mostly useful for hash tables where the two pointer list head is</span>
<a name="590" /><span class="Maybe">     590:</span> <span class="k"> * too wasteful.</span>
<a name="591" /><span class="Maybe">     591:</span> <span class="k"> * You lose the ability to access the tail in O(1).</span>
<a name="592" /><span class="Maybe">     592:</span> <span class="k"> */</span>
<a name="593" /><span class="Maybe">     593:</span> 
<a name="594" /><span class="Maybe">     594:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_SExJU1RfSEVBRF9JTklUXzA_"><span class="b">HLIST_HEAD_INIT</span></a> <span class="f">{</span> <span class="f">.</span><span class="b">first</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_TlVMTF8w"><span class="b">NULL</span></a> <span class="f">}</span>
<a name="595" /><span class="Maybe">     595:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_SExJU1RfSEVBRF8w"><span class="b">HLIST_HEAD</span></a><span class="f">(</span><span class="b">name</span><span class="f">)</span> <span class="m">struct</span> <span class="b">hlist_head</span> <span class="b">name</span> <span class="f">=</span> <span class="f">{</span>  <span class="f">.</span><span class="b">first</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_TlVMTF8w"><span class="b">NULL</span></a> <span class="f">}</span>
<a name="596" /><span class="Maybe">     596:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_SU5JVF9ITElTVF9IRUFEXzA_"><span class="b">INIT_HLIST_HEAD</span></a><span class="f">(</span><span class="b">ptr</span><span class="f">)</span> <span class="f">(</span><span class="f">(</span><span class="b">ptr</span><span class="f">)</span><span class="f">-&gt;</span><span class="b">first</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_TlVMTF8w"><span class="b">NULL</span></a><span class="f">)</span>
<a name="597" /><span class="Maybe">     597:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">INIT_HLIST_NODE</span><span class="f">(</span><span class="m">struct</span> <span class="b">hlist_node</span> <span class="f">*</span><span class="b">h</span><span class="f">)</span>
<a name="598" /><span class="Maybe">     598:</span> <span class="f">{</span>
<a name="599" /><span class="Maybe">     599:</span>     <span class="b">h</span><span class="f">-&gt;</span><span class="b">next</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_TlVMTF8w"><span class="b">NULL</span></a><span class="f">;</span>
<a name="600" /><span class="Maybe">     600:</span>     <span class="b">h</span><span class="f">-&gt;</span><span class="b">pprev</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_TlVMTF8w"><span class="b">NULL</span></a><span class="f">;</span>
<a name="601" /><span class="Maybe">     601:</span> <span class="f">}</span>
<a name="602" /><span class="Maybe">     602:</span> 
<a name="603" /><span class="Maybe">     603:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">hlist_unhashed</span><span class="f">(</span><span class="m">const</span> <span class="m">struct</span> <span class="b">hlist_node</span> <span class="f">*</span><span class="b">h</span><span class="f">)</span>
<a name="604" /><span class="Maybe">     604:</span> <span class="f">{</span>
<a name="605" /><span class="Maybe">     605:</span>     <span class="m">return</span> <span class="f">!</span><span class="b">h</span><span class="f">-&gt;</span><span class="b">pprev</span><span class="f">;</span>
<a name="606" /><span class="Maybe">     606:</span> <span class="f">}</span>
<a name="607" /><span class="Maybe">     607:</span> 
<a name="608" /><span class="Maybe">     608:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">hlist_empty</span><span class="f">(</span><span class="m">const</span> <span class="m">struct</span> <span class="b">hlist_head</span> <span class="f">*</span><span class="b">h</span><span class="f">)</span>
<a name="609" /><span class="Maybe">     609:</span> <span class="f">{</span>
<a name="610" /><span class="Maybe">     610:</span>     <span class="m">return</span> <span class="f">!</span><span class="b">h</span><span class="f">-&gt;</span><span class="b">first</span><span class="f">;</span>
<a name="611" /><span class="Maybe">     611:</span> <span class="f">}</span>
<a name="612" /><span class="Maybe">     612:</span> 
<a name="613" /><span class="Maybe">     613:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">__hlist_del</span><span class="f">(</span><span class="m">struct</span> <span class="b">hlist_node</span> <span class="f">*</span><span class="b">n</span><span class="f">)</span>
<a name="614" /><span class="Maybe">     614:</span> <span class="f">{</span>
<a name="615" /><span class="Maybe">     615:</span>     <span class="m">struct</span> <span class="b">hlist_node</span> <span class="f">*</span><span class="b">next</span> <span class="f">=</span> <span class="b">n</span><span class="f">-&gt;</span><span class="b">next</span><span class="f">;</span>
<a name="616" /><span class="Maybe">     616:</span>     <span class="m">struct</span> <span class="b">hlist_node</span> <span class="f">*</span><span class="f">*</span><span class="b">pprev</span> <span class="f">=</span> <span class="b">n</span><span class="f">-&gt;</span><span class="b">pprev</span><span class="f">;</span>
<a name="617" /><span class="Maybe">     617:</span>     <span class="f">*</span><span class="b">pprev</span> <span class="f">=</span> <span class="b">next</span><span class="f">;</span>
<a name="618" /><span class="Maybe">     618:</span>     <span class="m">if</span> <span class="f">(</span><span class="b">next</span><span class="f">)</span>
<a name="619" /><span class="Maybe">     619:</span>         <span class="b">next</span><span class="f">-&gt;</span><span class="b">pprev</span> <span class="f">=</span> <span class="b">pprev</span><span class="f">;</span>
<a name="620" /><span class="Maybe">     620:</span> <span class="f">}</span>
<a name="621" /><span class="Maybe">     621:</span> 
<a name="622" /><span class="Maybe">     622:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">hlist_del</span><span class="f">(</span><span class="m">struct</span> <span class="b">hlist_node</span> <span class="f">*</span><span class="b">n</span><span class="f">)</span>
<a name="623" /><span class="Maybe">     623:</span> <span class="f">{</span>
<a name="624" /><span class="Maybe">     624:</span>     <span class="b">__hlist_del</span><span class="f">(</span><span class="b">n</span><span class="f">)</span><span class="f">;</span>
<a name="625" /><span class="Maybe">     625:</span>     <span class="b">n</span><span class="f">-&gt;</span><span class="b">next</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_TElTVF9QT0lTT04xXzA_"><span class="b">LIST_POISON1</span></a><span class="f">;</span>
<a name="626" /><span class="Maybe">     626:</span>     <span class="b">n</span><span class="f">-&gt;</span><span class="b">pprev</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_TElTVF9QT0lTT04yXzA_"><span class="b">LIST_POISON2</span></a><span class="f">;</span>
<a name="627" /><span class="Maybe">     627:</span> <span class="f">}</span>
<a name="628" /><span class="Maybe">     628:</span> 
<a name="629" /><span class="Maybe">     629:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">hlist_del_init</span><span class="f">(</span><span class="m">struct</span> <span class="b">hlist_node</span> <span class="f">*</span><span class="b">n</span><span class="f">)</span>
<a name="630" /><span class="Maybe">     630:</span> <span class="f">{</span>
<a name="631" /><span class="Maybe">     631:</span>     <span class="m">if</span> <span class="f">(</span><span class="f">!</span><span class="b">hlist_unhashed</span><span class="f">(</span><span class="b">n</span><span class="f">)</span><span class="f">)</span> <span class="f">{</span>
<a name="632" /><span class="Maybe">     632:</span>         <span class="b">__hlist_del</span><span class="f">(</span><span class="b">n</span><span class="f">)</span><span class="f">;</span>
<a name="633" /><span class="Maybe">     633:</span>         <span class="b">INIT_HLIST_NODE</span><span class="f">(</span><span class="b">n</span><span class="f">)</span><span class="f">;</span>
<a name="634" /><span class="Maybe">     634:</span>     <span class="f">}</span>
<a name="635" /><span class="Maybe">     635:</span> <span class="f">}</span>
<a name="636" /><span class="Maybe">     636:</span> 
<a name="637" /><span class="Maybe">     637:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">hlist_add_head</span><span class="f">(</span><span class="m">struct</span> <span class="b">hlist_node</span> <span class="f">*</span><span class="b">n</span><span class="f">,</span> <span class="m">struct</span> <span class="b">hlist_head</span> <span class="f">*</span><span class="b">h</span><span class="f">)</span>
<a name="638" /><span class="Maybe">     638:</span> <span class="f">{</span>
<a name="639" /><span class="Maybe">     639:</span>     <span class="m">struct</span> <span class="b">hlist_node</span> <span class="f">*</span><span class="b">first</span> <span class="f">=</span> <span class="b">h</span><span class="f">-&gt;</span><span class="b">first</span><span class="f">;</span>
<a name="640" /><span class="Maybe">     640:</span>     <span class="b">n</span><span class="f">-&gt;</span><span class="b">next</span> <span class="f">=</span> <span class="b">first</span><span class="f">;</span>
<a name="641" /><span class="Maybe">     641:</span>     <span class="m">if</span> <span class="f">(</span><span class="b">first</span><span class="f">)</span>
<a name="642" /><span class="Maybe">     642:</span>         <span class="b">first</span><span class="f">-&gt;</span><span class="b">pprev</span> <span class="f">=</span> <span class="f">&amp;</span><span class="b">n</span><span class="f">-&gt;</span><span class="b">next</span><span class="f">;</span>
<a name="643" /><span class="Maybe">     643:</span>     <span class="b">h</span><span class="f">-&gt;</span><span class="b">first</span> <span class="f">=</span> <span class="b">n</span><span class="f">;</span>
<a name="644" /><span class="Maybe">     644:</span>     <span class="b">n</span><span class="f">-&gt;</span><span class="b">pprev</span> <span class="f">=</span> <span class="f">&amp;</span><span class="b">h</span><span class="f">-&gt;</span><span class="b">first</span><span class="f">;</span>
<a name="645" /><span class="Maybe">     645:</span> <span class="f">}</span>
<a name="646" /><span class="Maybe">     646:</span> 
<a name="647" /><span class="Maybe">     647:</span> <span class="k">/* next must be != NULL */</span>
<a name="648" /><span class="Maybe">     648:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">hlist_add_before</span><span class="f">(</span><span class="m">struct</span> <span class="b">hlist_node</span> <span class="f">*</span><span class="b">n</span><span class="f">,</span>
<a name="649" /><span class="Maybe">     649:</span>                     <span class="m">struct</span> <span class="b">hlist_node</span> <span class="f">*</span><span class="b">next</span><span class="f">)</span>
<a name="650" /><span class="Maybe">     650:</span> <span class="f">{</span>
<a name="651" /><span class="Maybe">     651:</span>     <span class="b">n</span><span class="f">-&gt;</span><span class="b">pprev</span> <span class="f">=</span> <span class="b">next</span><span class="f">-&gt;</span><span class="b">pprev</span><span class="f">;</span>
<a name="652" /><span class="Maybe">     652:</span>     <span class="b">n</span><span class="f">-&gt;</span><span class="b">next</span> <span class="f">=</span> <span class="b">next</span><span class="f">;</span>
<a name="653" /><span class="Maybe">     653:</span>     <span class="b">next</span><span class="f">-&gt;</span><span class="b">pprev</span> <span class="f">=</span> <span class="f">&amp;</span><span class="b">n</span><span class="f">-&gt;</span><span class="b">next</span><span class="f">;</span>
<a name="654" /><span class="Maybe">     654:</span>     <span class="f">*</span><span class="f">(</span><span class="b">n</span><span class="f">-&gt;</span><span class="b">pprev</span><span class="f">)</span> <span class="f">=</span> <span class="b">n</span><span class="f">;</span>
<a name="655" /><span class="Maybe">     655:</span> <span class="f">}</span>
<a name="656" /><span class="Maybe">     656:</span> 
<a name="657" /><span class="Maybe">     657:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">hlist_add_after</span><span class="f">(</span><span class="m">struct</span> <span class="b">hlist_node</span> <span class="f">*</span><span class="b">n</span><span class="f">,</span>
<a name="658" /><span class="Maybe">     658:</span>                     <span class="m">struct</span> <span class="b">hlist_node</span> <span class="f">*</span><span class="b">next</span><span class="f">)</span>
<a name="659" /><span class="Maybe">     659:</span> <span class="f">{</span>
<a name="660" /><span class="Maybe">     660:</span>     <span class="b">next</span><span class="f">-&gt;</span><span class="b">next</span> <span class="f">=</span> <span class="b">n</span><span class="f">-&gt;</span><span class="b">next</span><span class="f">;</span>
<a name="661" /><span class="Maybe">     661:</span>     <span class="b">n</span><span class="f">-&gt;</span><span class="b">next</span> <span class="f">=</span> <span class="b">next</span><span class="f">;</span>
<a name="662" /><span class="Maybe">     662:</span>     <span class="b">next</span><span class="f">-&gt;</span><span class="b">pprev</span> <span class="f">=</span> <span class="f">&amp;</span><span class="b">n</span><span class="f">-&gt;</span><span class="b">next</span><span class="f">;</span>
<a name="663" /><span class="Maybe">     663:</span> 
<a name="664" /><span class="Maybe">     664:</span>     <span class="m">if</span><span class="f">(</span><span class="b">next</span><span class="f">-&gt;</span><span class="b">next</span><span class="f">)</span>
<a name="665" /><span class="Maybe">     665:</span>         <span class="b">next</span><span class="f">-&gt;</span><span class="b">next</span><span class="f">-&gt;</span><span class="b">pprev</span>  <span class="f">=</span> <span class="f">&amp;</span><span class="b">next</span><span class="f">-&gt;</span><span class="b">next</span><span class="f">;</span>
<a name="666" /><span class="Maybe">     666:</span> <span class="f">}</span>
<a name="667" /><span class="Maybe">     667:</span> 
<a name="668" /><span class="Maybe">     668:</span> <span class="k">/* after that we&apos;ll appear to be on some hlist and hlist_del will work */</span>
<a name="669" /><span class="Maybe">     669:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">hlist_add_fake</span><span class="f">(</span><span class="m">struct</span> <span class="b">hlist_node</span> <span class="f">*</span><span class="b">n</span><span class="f">)</span>
<a name="670" /><span class="Maybe">     670:</span> <span class="f">{</span>
<a name="671" /><span class="Maybe">     671:</span>     <span class="b">n</span><span class="f">-&gt;</span><span class="b">pprev</span> <span class="f">=</span> <span class="f">&amp;</span><span class="b">n</span><span class="f">-&gt;</span><span class="b">next</span><span class="f">;</span>
<a name="672" /><span class="Maybe">     672:</span> <span class="f">}</span>
<a name="673" /><span class="Maybe">     673:</span> 
<a name="674" /><span class="Maybe">     674:</span> <span class="k">/*</span>
<a name="675" /><span class="Maybe">     675:</span> <span class="k"> * Move a list from one list head to another. Fixup the pprev</span>
<a name="676" /><span class="Maybe">     676:</span> <span class="k"> * reference of the first entry if it exists.</span>
<a name="677" /><span class="Maybe">     677:</span> <span class="k"> */</span>
<a name="678" /><span class="Maybe">     678:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">void</span> <span class="b">hlist_move_list</span><span class="f">(</span><span class="m">struct</span> <span class="b">hlist_head</span> <span class="f">*</span><span class="b">old</span><span class="f">,</span>
<a name="679" /><span class="Maybe">     679:</span>                    <span class="m">struct</span> <span class="b">hlist_head</span> <span class="f">*</span><span class="m">new</span><span class="f">)</span>
<a name="680" /><span class="Maybe">     680:</span> <span class="f">{</span>
<a name="681" /><span class="Maybe">     681:</span>     <span class="m">new</span><span class="f">-&gt;</span><span class="b">first</span> <span class="f">=</span> <span class="b">old</span><span class="f">-&gt;</span><span class="b">first</span><span class="f">;</span>
<a name="682" /><span class="Maybe">     682:</span>     <span class="m">if</span> <span class="f">(</span><span class="m">new</span><span class="f">-&gt;</span><span class="b">first</span><span class="f">)</span>
<a name="683" /><span class="Maybe">     683:</span>         <span class="m">new</span><span class="f">-&gt;</span><span class="b">first</span><span class="f">-&gt;</span><span class="b">pprev</span> <span class="f">=</span> <span class="f">&amp;</span><span class="m">new</span><span class="f">-&gt;</span><span class="b">first</span><span class="f">;</span>
<a name="684" /><span class="Maybe">     684:</span>     <span class="b">old</span><span class="f">-&gt;</span><span class="b">first</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_TlVMTF8w"><span class="b">NULL</span></a><span class="f">;</span>
<a name="685" /><span class="Maybe">     685:</span> <span class="f">}</span>
<a name="686" /><span class="Maybe">     686:</span> 
<a name="687" /><span class="Maybe">     687:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_aGxpc3RfZW50cnlfMA__"><span class="b">hlist_entry</span></a><span class="f">(</span><span class="b">ptr</span><span class="f">,</span> <span class="b">type</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span> <a href="cpu.c_macros_ref.html#_Y29udGFpbmVyX29mXzA_"><span class="b">container_of</span></a><span class="f">(</span><span class="b">ptr</span><span class="f">,</span><span class="b">type</span><span class="f">,</span><span class="b">member</span><span class="f">)</span>
<a name="688" /><span class="Maybe">     688:</span> 
<a name="689" /><span class="Maybe">     689:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_aGxpc3RfZm9yX2VhY2hfMA__"><span class="b">hlist_for_each</span></a><span class="f">(</span><span class="b">pos</span><span class="f">,</span> <span class="b">head</span><span class="f">)</span> \
<a name="690" /><span class="Maybe">     690:</span>     <span class="m">for</span> <span class="f">(</span><span class="b">pos</span> <span class="f">=</span> <span class="f">(</span><span class="b">head</span><span class="f">)</span><span class="f">-&gt;</span><span class="b">first</span><span class="f">;</span> <span class="b">pos</span> <span class="f">;</span> <span class="b">pos</span> <span class="f">=</span> <span class="b">pos</span><span class="f">-&gt;</span><span class="b">next</span><span class="f">)</span>
<a name="691" /><span class="Maybe">     691:</span> 
<a name="692" /><span class="Maybe">     692:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_aGxpc3RfZm9yX2VhY2hfc2FmZV8w"><span class="b">hlist_for_each_safe</span></a><span class="f">(</span><span class="b">pos</span><span class="f">,</span> <span class="b">n</span><span class="f">,</span> <span class="b">head</span><span class="f">)</span> \
<a name="693" /><span class="Maybe">     693:</span>     <span class="m">for</span> <span class="f">(</span><span class="b">pos</span> <span class="f">=</span> <span class="f">(</span><span class="b">head</span><span class="f">)</span><span class="f">-&gt;</span><span class="b">first</span><span class="f">;</span> <span class="b">pos</span> <span class="f">&amp;&amp;</span> <span class="f">(</span><span class="f">{</span> <span class="b">n</span> <span class="f">=</span> <span class="b">pos</span><span class="f">-&gt;</span><span class="b">next</span><span class="f">;</span> <span class="c">1</span><span class="f">;</span> <span class="f">}</span><span class="f">)</span><span class="f">;</span> \
<a name="694" /><span class="Maybe">     694:</span>          <span class="b">pos</span> <span class="f">=</span> <span class="b">n</span><span class="f">)</span>
<a name="695" /><span class="Maybe">     695:</span> 
<a name="696" /><span class="Maybe">     696:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_aGxpc3RfZW50cnlfc2FmZV8w"><span class="b">hlist_entry_safe</span></a><span class="f">(</span><span class="b">ptr</span><span class="f">,</span> <span class="b">type</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span> \
<a name="697" /><span class="Maybe">     697:</span>     <span class="f">(</span><span class="f">{</span> <span class="b">typeof</span><span class="f">(</span><span class="b">ptr</span><span class="f">)</span> <span class="b">____ptr</span> <span class="f">=</span> <span class="f">(</span><span class="b">ptr</span><span class="f">)</span><span class="f">;</span> \
<a name="698" /><span class="Maybe">     698:</span>        <span class="b">____ptr</span> <span class="f">?</span> <a href="cpu.c_macros_noref.html#_aGxpc3RfZW50cnlfMA__"><span class="b">hlist_entry</span></a><span class="f">(</span><span class="b">____ptr</span><span class="f">,</span> <span class="b">type</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span> <span class="f">:</span> <a href="cpu.c_macros_ref.html#_TlVMTF8w"><span class="b">NULL</span></a><span class="f">;</span> \
<a name="699" /><span class="Maybe">     699:</span>     <span class="f">}</span><span class="f">)</span>
<a name="700" /><span class="Maybe">     700:</span> 
<a name="701" /><span class="Maybe">     701:</span> <span class="k">/**</span>
<a name="702" /><span class="Maybe">     702:</span> <span class="k"> * hlist_for_each_entry    - iterate over list of given type</span>
<a name="703" /><span class="Maybe">     703:</span> <span class="k"> * @pos:    the type * to use as a loop cursor.</span>
<a name="704" /><span class="Maybe">     704:</span> <span class="k"> * @head:    the head for your list.</span>
<a name="705" /><span class="Maybe">     705:</span> <span class="k"> * @member:    the name of the hlist_node within the struct.</span>
<a name="706" /><span class="Maybe">     706:</span> <span class="k"> */</span>
<a name="707" /><span class="Maybe">     707:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_aGxpc3RfZm9yX2VhY2hfZW50cnlfMA__"><span class="b">hlist_for_each_entry</span></a><span class="f">(</span><span class="b">pos</span><span class="f">,</span> <span class="b">head</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span>                \
<a name="708" /><span class="Maybe">     708:</span>     <span class="m">for</span> <span class="f">(</span><span class="b">pos</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_aGxpc3RfZW50cnlfc2FmZV8w"><span class="b">hlist_entry_safe</span></a><span class="f">(</span><span class="f">(</span><span class="b">head</span><span class="f">)</span><span class="f">-&gt;</span><span class="b">first</span><span class="f">,</span> <span class="b">typeof</span><span class="f">(</span><span class="f">*</span><span class="f">(</span><span class="b">pos</span><span class="f">)</span><span class="f">)</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span><span class="f">;\
</span>         <span class="b">pos</span><span class="f">;</span>                            \
<a name="710" /><span class="Maybe">     710:</span>          <span class="b">pos</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_aGxpc3RfZW50cnlfc2FmZV8w"><span class="b">hlist_entry_safe</span></a><span class="f">(</span><span class="f">(</span><span class="b">pos</span><span class="f">)</span><span class="f">-&gt;</span><span class="b">member</span><span class="f">.</span><span class="b">next</span><span class="f">,</span> <span class="b">typeof</span><span class="f">(</span><span class="f">*</span><span class="f">(</span><span class="b">pos</span><span class="f">)</span><span class="f">)</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span><span class="f">)</span>
<a name="711" /><span class="Maybe">     711:</span> 
<a name="712" /><span class="Maybe">     712:</span> <span class="k">/**</span>
<a name="713" /><span class="Maybe">     713:</span> <span class="k"> * hlist_for_each_entry_continue - iterate over a hlist continuing after current point</span>
<a name="714" /><span class="Maybe">     714:</span> <span class="k"> * @pos:    the type * to use as a loop cursor.</span>
<a name="715" /><span class="Maybe">     715:</span> <span class="k"> * @member:    the name of the hlist_node within the struct.</span>
<a name="716" /><span class="Maybe">     716:</span> <span class="k"> */</span>
<a name="717" /><span class="Maybe">     717:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_aGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfMA__"><span class="b">hlist_for_each_entry_continue</span></a><span class="f">(</span><span class="b">pos</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span>            \
<a name="718" /><span class="Maybe">     718:</span>     <span class="m">for</span> <span class="f">(</span><span class="b">pos</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_aGxpc3RfZW50cnlfc2FmZV8w"><span class="b">hlist_entry_safe</span></a><span class="f">(</span><span class="f">(</span><span class="b">pos</span><span class="f">)</span><span class="f">-&gt;</span><span class="b">member</span><span class="f">.</span><span class="b">next</span><span class="f">,</span> <span class="b">typeof</span><span class="f">(</span><span class="f">*</span><span class="f">(</span><span class="b">pos</span><span class="f">)</span><span class="f">)</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span><span class="f">;\
</span>         <span class="b">pos</span><span class="f">;</span>                            \
<a name="720" /><span class="Maybe">     720:</span>          <span class="b">pos</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_aGxpc3RfZW50cnlfc2FmZV8w"><span class="b">hlist_entry_safe</span></a><span class="f">(</span><span class="f">(</span><span class="b">pos</span><span class="f">)</span><span class="f">-&gt;</span><span class="b">member</span><span class="f">.</span><span class="b">next</span><span class="f">,</span> <span class="b">typeof</span><span class="f">(</span><span class="f">*</span><span class="f">(</span><span class="b">pos</span><span class="f">)</span><span class="f">)</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span><span class="f">)</span>
<a name="721" /><span class="Maybe">     721:</span> 
<a name="722" /><span class="Maybe">     722:</span> <span class="k">/**</span>
<a name="723" /><span class="Maybe">     723:</span> <span class="k"> * hlist_for_each_entry_from - iterate over a hlist continuing from current point</span>
<a name="724" /><span class="Maybe">     724:</span> <span class="k"> * @pos:    the type * to use as a loop cursor.</span>
<a name="725" /><span class="Maybe">     725:</span> <span class="k"> * @member:    the name of the hlist_node within the struct.</span>
<a name="726" /><span class="Maybe">     726:</span> <span class="k"> */</span>
<a name="727" /><span class="Maybe">     727:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_aGxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbV8w"><span class="b">hlist_for_each_entry_from</span></a><span class="f">(</span><span class="b">pos</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span>                \
<a name="728" /><span class="Maybe">     728:</span>     <span class="m">for</span> <span class="f">(</span><span class="f">;</span> <span class="b">pos</span><span class="f">;</span>                            \
<a name="729" /><span class="Maybe">     729:</span>          <span class="b">pos</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_aGxpc3RfZW50cnlfc2FmZV8w"><span class="b">hlist_entry_safe</span></a><span class="f">(</span><span class="f">(</span><span class="b">pos</span><span class="f">)</span><span class="f">-&gt;</span><span class="b">member</span><span class="f">.</span><span class="b">next</span><span class="f">,</span> <span class="b">typeof</span><span class="f">(</span><span class="f">*</span><span class="f">(</span><span class="b">pos</span><span class="f">)</span><span class="f">)</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span><span class="f">)</span>
<a name="730" /><span class="Maybe">     730:</span> 
<a name="731" /><span class="Maybe">     731:</span> <span class="k">/**</span>
<a name="732" /><span class="Maybe">     732:</span> <span class="k"> * hlist_for_each_entry_safe - iterate over list of given type safe against removal of list entry</span>
<a name="733" /><span class="Maybe">     733:</span> <span class="k"> * @pos:    the type * to use as a loop cursor.</span>
<a name="734" /><span class="Maybe">     734:</span> <span class="k"> * @n:        another &amp;struct hlist_node to use as temporary storage</span>
<a name="735" /><span class="Maybe">     735:</span> <span class="k"> * @head:    the head for your list.</span>
<a name="736" /><span class="Maybe">     736:</span> <span class="k"> * @member:    the name of the hlist_node within the struct.</span>
<a name="737" /><span class="Maybe">     737:</span> <span class="k"> */</span>
<a name="738" /><span class="Maybe">     738:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV8w"><span class="b">hlist_for_each_entry_safe</span></a><span class="f">(</span><span class="b">pos</span><span class="f">,</span> <span class="b">n</span><span class="f">,</span> <span class="b">head</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span>         \
<a name="739" /><span class="Maybe">     739:</span>     <span class="m">for</span> <span class="f">(</span><span class="b">pos</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_aGxpc3RfZW50cnlfc2FmZV8w"><span class="b">hlist_entry_safe</span></a><span class="f">(</span><span class="f">(</span><span class="b">head</span><span class="f">)</span><span class="f">-&gt;</span><span class="b">first</span><span class="f">,</span> <span class="b">typeof</span><span class="f">(</span><span class="f">*</span><span class="b">pos</span><span class="f">)</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span><span class="f">;\
</span>         <span class="b">pos</span> <span class="f">&amp;&amp;</span> <span class="f">(</span><span class="f">{</span> <span class="b">n</span> <span class="f">=</span> <span class="b">pos</span><span class="f">-&gt;</span><span class="b">member</span><span class="f">.</span><span class="b">next</span><span class="f">;</span> <span class="c">1</span><span class="f">;</span> <span class="f">}</span><span class="f">)</span><span class="f">;</span>            \
<a name="741" /><span class="Maybe">     741:</span>          <span class="b">pos</span> <span class="f">=</span> <a href="cpu.c_macros_noref.html#_aGxpc3RfZW50cnlfc2FmZV8w"><span class="b">hlist_entry_safe</span></a><span class="f">(</span><span class="b">n</span><span class="f">,</span> <span class="b">typeof</span><span class="f">(</span><span class="f">*</span><span class="b">pos</span><span class="f">)</span><span class="f">,</span> <span class="b">member</span><span class="f">)</span><span class="f">)</span>
<a name="742" /><span class="Maybe">     742:</span> 
<a name="743" /><span class="True">     743:</span> <span class="f">#</span><span class="n">endif</span>
<a name="744" /><span class="True">     744:</span> </pre>
  </body>
</html>
